提升:http://sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.7z
(均在D:驱动器上)
boost_regex汇编为:
b2 --prefix=D:\boost toolset=gcc --with-regex --layout=tagged release
代码:
#include <boost\regex.hpp>
int main() {
boost::regex reg("[a-z]+");
}
使用参数编译:
g++ -I "d:\boost" -Os -o test.exe test.cpp -static -L d:\boost\stage\lib -lboost_regex-mt
错误:
d:\boost\stage\lib\libboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTVN5boost16exception_detail19error_info_injectorISt13runtime_errorEE[__ZTVN5boost16exception_detail19error_info_injectorISt13runtime_errorEE]' has different size
d:\boost\stage\lib\libboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorISt13runtime_errorEEEE[__ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorISt13runtime_errorEEEE]' has different size
d:\boost\stage\lib\libboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTSN5boost16exception_detail10clone_implINS0_19error_info_injectorISt13runtime_errorEEEE[__ZTSN5boost16exception_detail10clone_implINS0_19error_info_injectorISt13runtime_errorEEEE]' has different size
d:\boost\stage\lib\libboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTSN5boost16exception_detail10clone_baseE[__ZTSN5boost16exception_detail10clone_baseE]' has different size
d:\boost\stage\lib\libboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTSN5boost16exception_detail19error_info_injectorISt13runtime_errorEE[__ZTSN5boost16exception_detail19error_info_injectorISt13runtime_errorEE]' has different size
它编译好了,但我还没有测试它是否适用于更复杂的代码。删除-Os
开关可以清除错误,但应用程序大小会大2倍。
也许我也应该使用大小优化来构建Boost,但我不知道在b2命令行中将该选项传递到何处。
答案 0 :(得分:15)
在我的情况下,boost 1.58在内部使用“-march = i686”进行编译,但我的代码却没有。在我的项目中添加“-march = i686”可以摆脱所有“重复部分”。
吸取的教训:始终确保所有库和主项目都使用相同的编译器选项进行编译。
答案 1 :(得分:2)
我相信这是一个编译错误。我的解决方法是添加-fno-tree-vectorize
。
答案 2 :(得分:0)
我在编译代码时遇到同样的错误,使用gcc-4.9.1在MinGW32中使用了一个使用gcc-4.4.7作为编译器的lib。而且我也用ccache来加速,ccache也是个问题。删除〜/ .ccache /中的缓存并重新编译然后我解决这个问题。