编译器:http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.7.2/32-bit/threads-posix/sjlj/x32-4.7.2-release-posix-sjlj-rev6.7z
增加:http://sourceforge.net/projects/boost/files/boost/1.52.0/boost_1_52_0.7z
(都在D: drive)
boost_regex:
b2 --prefix=D:boost toolset=gcc --with-regex --layout=tagged release
代码:#include <boostregex.hpp>
int main() {
boost::regex reg("[a-z]+");
}
用参数编译:
g++ -I "d:boost" -Os -o test.exe test.cpp -static -L d:booststagelib -lboost_regex-mt
错误:d:booststageliblibboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTVN5boost16exception_detail19error_info_injectorISt13runtime_errorEE[__ZTVN5boost16exception_detail19error_info_injectorISt13runtime_errorEE]' has different size
d:booststageliblibboost_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:booststageliblibboost_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:booststageliblibboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTSN5boost16exception_detail10clone_baseE[__ZTSN5boost16exception_detail10clone_baseE]' has different size
d:booststageliblibboost_regex-mt.a(regex.o): duplicate section `.rdata$_ZTSN5boost16exception_detail19error_info_injectorISt13runtime_errorEE[__ZTSN5boost16exception_detail19error_info_injectorISt13runtime_errorEE]' has different size
它可以编译,但我还没有测试它是否会在更复杂的代码中工作。删除-Os
开关清除错误,但应用程序大小是原来的两倍。
也许我应该建立Boost与大小优化也,但我不知道在哪里传递这个选项在b2命令行
在我的情况下,boost 1.58内部编译为"-march=i686",但我的代码不是。添加"-march=i686"到我的项目中,消除了所有的"重复部分"。
经验教训:总是煞费苦心地确保所有库和主项目都使用相同的编译器选项进行编译。
我相信这是一个编译器错误。在我的例子中,解决方法是添加-fno-tree-vectorize
。
当我在MinGW32中使用使用gcc-4.9.1作为编译器的库编译我的代码时,我得到了同样的错误。而且我也用了缓存来加速,缓存也是一个问题。删除~/中的缓存。ccache/并重新编译,然后我解决这个问题。