当我在发布模式下链接我的项目时,我收到以下警告:
myProject-libs/release/libboost_regex-mt-s-1.50.0.a(cpp_regex_traits.o): duplicate section `.data$_ZZN5boost16cpp_regex_traitsIcE21get_catalog_name_instEvE6s_name[boost::cpp_regex_traits<char>::get_catalog_name_inst()::s_name]' has different size
我怀疑问题的原因可能是boost库使用的编译选项与我的项目不同,但我不知道如何找到这些差异(boost在构建过程中没有输出这些选项)。
为了在Ubuntu 12.04上编译win32版本的boost库,我使用了以下步骤:
tar jxf boost_1_50_0.tar.bz2
cd boost_1_50_0
./bootstrap.sh
echo "using gcc : 4.6 : i686-w64-mingw32-g++ : <rc>i686-w64-mingw32-windres <archiver>i686-w64-mingw32-ar ;" > user-config.jam
./bjam toolset=gcc target-os=windows --address-model=32 variant=release threading=multi threadapi=win32 link=static runtime-link=static --prefix=/opt/boost_1_50_0-release-static-windows-32 --user-config=user-config.jam -j 10 --without-mpi --without-python -sNO_BZIP2=1 -sNO_ZLIB=1 --layout=tagged install
为了编译我的项目中的文件,我使用类似以下的命令:
i686-w64-mingw32-g++ -march=corei7 -mfpmath=sse -m32 -Wall -fmessage-length=0 -I"/opt/boost_1_50_0-release-static-windows-32/include" -std=c++0x -O3 -g0 -DNDEBUG -I"myProject/src/cpp" -c -o myProject/build/release/src/cpp/myproject.o myproject/src/cpp/myproject.cpp
我的测试表明正则表达式运行良好,但我仍想解决警告问题。
编辑
我发现可以使用 bjam 的 cxxflags= 参数添加额外的编译器选项。
例如: bjam cxxflags='-fPIC' ....
也许确保传递给项目的参数与我所做的相同,可以解决问题(特别是与优化相关的参数,如链接的问题中建议的那样)。