CPPCMS 在MAC上的安装与编译

问题描述:按照官网的步骤,进行如下操作

1. tar xzvf cppcms-1.0.1.tar.gz

2. cd cppcms-1.0.1

3. mkdir build

4. cd build

5. cmake -DCMAKE_INSTALL_PREFIX=/opt/local ..

编译过程中,出现了如下错误信息

 

Linking CXX shared library libbooster.dylib

        Undefined symbols for architecture x86_64:

        "_libiconv_close",

        referenced from: booster::locale::conv::impl::iconverter_base::~iconverter_base()in codepage.cpp.o                 booster::locale::conv::impl::iconverter_base::~iconverter_base()in codepage.cpp.o

        ⋯⋯

        ld: symbol(s) not found for architecture x86_64

        collect2: ld returned 1 exit status

        make[2]: *** [booster/libbooster.0.0.0.dylib] Error 1

        make[1]: *** [booster/CMakeFiles/booster.dir/all] Error 2

        make: *** [all] Error 2


问题解决:
乍看编译错误信息,很有可能被“ symbol(s) not found for architecture x86_64 ”误导,因为看到这句话还以为系统中的库函数接口是32bit的,而非cppcms所要求的64bit的。于是乎,动手查询libiconv 64bit库,废了一番周折也没查到64位的库函数,倒是很容易找到32位的库。心想,我的macbook pro肯定是32位的(根据安装mysql的经验,足以判断出我的系统是32位的,而不是64位的)所以不如所幸编译安装下载的32位的libiconv库吧。

         这里插句,我是如何知道是libiconv库的,因为在编译错误中提示_libiconv_close的函数调用时出现的编译错误,所以google一下这个函数,就知道来自libiconv库了。这个库是gnu开源的字符集转换库。如果正常在linux上, 当然就是老套的编译安装步骤了(./configure --prefix=.., make, make install). 但是在mac上,我使用了macports。 

1. port search libiconv
2. sudo port install libiconv

安装完毕后,重新进行cppcms的编译安装过程,安装顺利完成。
结论:实际上编译错误x86_64的编译错误给予我一个误导信息,通常这种错误是因为系统缺少安装cppcms所需要的库。建议,按照官网的要求,将必需的和推荐库,甚至可选的库一并安装到系统后,再编译安装cppcms.

你可能感兴趣的:(cppcms编译)