我正在使用一个名为" GenericMod"的项目。内部使用boost库1.58.0。
以前,boost 1.58是在红帽企业Linux服务器版本5.8(Tikanga)上编译的
其gcc -v输出如下
Using built-in specs.
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-55)
使用以下命令
编译./b2 install -a --includedir=testbuild/include --libdir=testbuild/lib --layout=system variant=release target-os=linux link=static runtime-link=static address-model=32 cxxflags=-fPIC
现在,当项目" GenericMod"在同一台机器上构建成功并且没有错误。
但最近构建环境发生了变化。该项目正在一台新机器中构建,现在是Red Hat Enterprise Linux Server 5.9版(Tikanga)
及其gcc -v输出
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)
当现在在这台机器上构建项目时,我收到了链接器错误(可能是因为boost库是在不同的环境中构建的)。
所以我用相同的构建命令再次在这台机器上构建了boost 1.58.0。
./b2 install -a --includedir=testbuild/include --libdir=testbuild/lib --layout=system variant=release target-os=linux link=static runtime-link=static address-model=32 cxxflags=-fPIC
现在当项目在这台机器上构建时,我的理解是不应该有任何错误,构建应该经过链接阶段。
但链接器错误仍然存在。
libboost_thread.a(thread.o): In function `boost::thread::physical_concurrency()':
thread.cpp:(.text+0x2084): undefined reference to `std::ctype<char>::_M_widen_init() const'
有人可以解释为什么会这样吗?过去一周我一直在为此而打破我的头脑,并没有在其他地方得到足够的解释。
我应该包含一些标志来指定i386的构建吗?
提前致谢