web-dev-qa-db-ja.com

`boost :: system :: system_category() 'へのg ++​​未定義の参照

私はこの問題への答えを高低で検索しました。私はブースト1.48を使用していますが、この問題を解決するために最も単純な形式に分解したため、プログラムは非常に単純です。

#include <boost/filesystem.hpp>

int main(int argc, char **argv) {
    return 0;
}

Makefileから実行されるg ++コマンドは次のとおりです。

g++ -m32 -Wall -o mapnik-test -L/usr/lib -I/usr/include -I/usr/include/freetype2 -lpthread -lboost_system mapnik-test.cpp

リンク中のエラーの完全なリストは次のとおりです。

/tmp/ccIbmuee.o: In function `__static_initialization_and_destruction_0(int, int)':
mapnik-test.cpp:(.text+0x49): undefined reference to `boost::system::generic_category()'
mapnik-test.cpp:(.text+0x53): undefined reference to `boost::system::generic_category()'
mapnik-test.cpp:(.text+0x5d): undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
make: *** [mapnik-test] Error 1

多くの人が同じ問題に苦しんでいることがわかりましたが、ほとんどの場合、解決策はLDFLAGSでboost_systemライブラリを提供することでした。 g ++コマンドラインからわかるように、私はすでにこれを指定しています。 libboost_system.aライブラリに対して明示的にリンクしようとしても役に立ちませんでした。この苦情を持っているのは私だけですか?

16
Craig

コマンドラインの先頭にソースファイルを配置します。

試してみてください

g++ -m32 -Wall mapnik-test.cpp -o mapnik-test -L/usr/lib -I/usr/include -I/usr/include/freetype2 -lpthread -lboost_system

リンカがソースファイル内の未定義の参照を解決できるように、ライブラリはソースファイルの後にのみ指定する必要があります。

27
panickal