11

コンパイラ: 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: ドライブ上)

以下でコンパイルされた 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 コマンド ラインでこのオプションをどこに渡すかわかりません。

4

3 に答える 3

15

私の場合、boost 1.58 は "-march=i686" で内部的にコンパイルされていましたが、私のコードはそうではありませんでした。プロジェクトに「-march=i686」を追加すると、すべての「重複セクション」が削除されました。

教訓:すべてのライブラリとメインプロジェクトが同じコンパイラオプションでコンパイルされていることを常に念入りに確認してください。

于 2015-04-19T22:27:46.203 に答える
3

これはコンパイラのバグだと思います。私の場合の回避策は、追加することでした-fno-tree-vectorize

于 2014-06-15T19:37:04.023 に答える
0

gcc-4.4.7 をコンパイラとして使用するライブラリを使用して MinGW32 で gcc-4.9.1 を使用するコードをコンパイルすると、同じエラーが発生しました。また、ccache を使用して速度を上げましたが、ccache も問題です。~/.ccache/ のキャッシュを削除して再コンパイルし、これを回避します。

于 2015-11-17T08:57:45.797 に答える