0

更新: コンパイルする方法が見つかりました。以下を参照してください。

こんにちは、cygwin でブースト プログラムをコンパイルする際に問題が発生しています。デフォルトのブーストおよび g++ パッケージを cygwin プロジェクトの setup.exe からインストールしました。

私の Linux システムでは、以下を使用してプログラム reg.cpp をコンパイルできます。

g++ -I/usr/include/boost -lboost_regex -o reg reg.cpp

cygwin では、これを少し編集する必要があります。

g++ -I/usr/include/boost-1_33_1 -lboost_regex-gcc-mt -o reg reg.cpp

問題は、cygwin バージョンでは、リンカが 100 万の未定義の参照エラーを引き起こすことです。ブースト テスト フレームワーク ライブラリを使用しようとしても、同じことが起こります。

リンカは boost_regex-gcc-mt を見つけていますが、インクルード ファイルと一致していないようです。最初のリンカ エラーは次のとおりです。

undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)'

コンパイル方法

ここで解決策を見つけましたコンパイルするには、次のことを行いました。

g++ -I/usr/include/boost-1_33_1 reg.cpp -o reg -lboost_regex-gcc-mt

投稿によると、それはリンカーの順序と関係があります。これが cygwin では重要であるが、最新の Linux では重要ではない理由を誰かが知っていますか?

4

2 に答える 2

2

リンカーは伝統的にライブラリを右から左に処理することがわかっています。ほとんどのリンカーはライブラリの配置を気にしませんが、cygwin は気にします。したがって、boost_regex ライブラリは最後に配置する必要があります。

于 2009-08-15T15:28:52.700 に答える
0

ブースト ドキュメントの例 ( Getting Started )を見ると、次のようになります。

Cygwin のコマンドは次のようになります。

g++ -c example.cpp
g++ -o example.exe example.o -lboost_regex-mt

(ライブラリは cpp ファイルの後にインクルードされます。) 間違い:

g++ -o example.exe -lboost_regex-mt example.o 
于 2014-02-21T16:31:25.540 に答える