boostをリンクした静的リンクライブラリ(仮にlib.aとします)を作り、そのライブラリをexe(仮にfoo.exeとします)にリンクするのですが、一部のboost関数がundefinedになってしまい困ってます。
この現象に関して、何か情報をお持ちの方がいらっしゃいましたら、ご教授頂けないでしょうか?
MinGWでboostをビルドし、その同じMinGWでlib.aをビルドしています。このlib.aにはboostの下記静的リンクライブラリをリンクしています。
C:/Boost/lib/libboost_locale-mgw52-mt-1_59.a
C:/Boost/lib/libboost_filesystem-mgw52-mt-1_59.a
C:/Boost/lib/libboost_system-mgw52-mt-1_59.a
このlib.aをfoo.exeへリンクするとboostの一部の関数がundefinedとなります。
lib.aをnmコマンドで見てみると、確かにそれらの関数が未定義(U)になっています。
ですが、元のlibboost*.aをnmコマンドで見ると、それらの関数はちゃんと定義済(T)になっているのです。
非常に不可解です。また、この現象はmsvc 2015では発生していません。
未定義エラーは全部で36個ですが、全て書くのもなんですので、一部を書きます。
- nmコマンドの表示 - libboost*.a lib.a boost::system::generic_category 00001a70 T U boost::system::system_category 00001ac0 T U boost::filesystem::detail::status 000027f0 T U boost::filesystem::path::filename 000016e0 T U boost::locale::generator::generate 00000dd0 T U
全てを確認できたわけではないのですが、libboost*.a内で既にリンクされてアドレスが0でないシンボルに限って未定義になっている印象です。
このような現象について、解決のヒントになるような情報に心当たりがありましたら、是非教えて下さい。
boostライブラリのリンク・トラブルで調べると、「boostはほとんどヘッダだけで良いが、filesystem等いくつかはリンクが必要だ、ライブラリをリンクしなさい」って回答が多くて、それに隠れて欲しい情報がなかなか見つからないのです。
環境
OS : Windows 7 pro 64bit
コンパイラ : MinGW 5.2.0 32bits版
boost : 1.59.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。