2013-08-13 7 views
6

私は明らかに見ることができないようです。私は私のプロジェクトのためにいくつかのBoostライブラリの機能を使用したいと私はこれらの素敵なエラーに突然のすべてを取得しています知っている:'boost :: system :: generic_category()'への未定義の参照はありますか?

ここ

Linking CXX executable ATFOR CMakeFiles/ATFOR.dir/stdafx.cc.o: In function __static_initialization_and_destruction_0(int, int)': stdafx.cc:(.text+0x3c): undefined reference to boost::system::generic_category()' stdafx.cc:(.text+0x48): undefined reference to boost::system::generic_category()' stdafx.cc:(.text+0x54): undefined reference to boost::system::system_category()' CMakeFiles/ATFOR.dir/Main.cc.o: In function __static_initialization_and_destruction_0(int, int)': Main.cc:(.text+0x29d): undefined reference to boost::system::generic_category()' Main.cc:(.text+0x2a9): undefined reference to boost::system::generic_category()' Main.cc:(.text+0x2b5): undefined reference to boost::system::system_category()' collect2: error: ld returned 1 exit status

あなたは私のCMakeLists.txt、ヘッダー、メインを見つける:http://pastie.org/8231509
することができますように私はCMakeListsでたくさんのことを試してみました。私はプロジェクトに必要なすべてのヘッダを持っていると確信しています。とにかく、私は前にそのようなエラーがあったことはありません。私は今のところアイデアが残っていないので、何が間違っているかについての提案や解決を本当に感謝します。あらかじめThx。それはあなたのプログラムにリンクされるのを

答えて

13

あなたが明示的にシステムライブラリを追加する必要があります

これはまた別に構築されている他のBoostライブラリ(正規表現、スレッドなど)のために行われなければならない
find_package(Boost REQUIRED COMPONENTS system) 
#          ^^^^^^ this :) 

see here) 。

+0

これはエラーを修正しませんでした:/ – Auberotte

+2

Cmakeはファイルシステム、システム、...のlibsを見つけたと言いますが、私が 'make'するとまだリンクエラーがあります。私はlibboost-1.53​​.0-すべてのデベロッパー、私は必要なすべてを持っている必要があります。私に含める必要があるboost :: systemのヘッダがありますか? 1つも見つからなかった – Auberotte

7

OK]をクリックして、興味のある人のために、マーク・ガルシアの答えが良いの呼び出しだったが、何を、ここでより重要なのは、あなたが明示的に

TARGET_LINK_LIBRARIES(ATFOR ${OpenCV_LIBS} curl ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY})

のようなブーストから希望のlibsに私が試した他のすべてのオプションをリンクする必要があるということですなぜ私はうまくいかなかったのですか?

11

"システム" libがリンクステージにありません。次のように私のconfigがあり、それはエラーが修正されていますのみ

find_package(Boost 1.55.0 REQUIRED) 

を使用して${Boost_LIBRARIES}として機能しないこと

find_package(Boost 1.55.0 REQUIRED COMPONENTS system filesystem) 

include_directories(... ${Boost_INCLUDE_DIRS}) 

link_directories(... ${Boost_LIBRARY_DIRS}) 

target_link_libraries(... ${Boost_LIBRARIES}) 

注意は、使用できません。あなたはブーストライブラリの正しいビルド(gccmsvcを...)持っている場合

+1

スーパーが役に立ちました。ありがとう。 +1。私の場合、書いておかなければならないのは、 'find_package(Boost REQUIRED system)'でした。私は(まだ)ファイルシステムは必要ありません。この質問は私の問題とは無関係であったが –

+1

は、私はここで答えて熟読することを決定し、あなたの答えは、私はようやく私の問題を解決し 'filesystem'が必要だと実感しました。ありがとうございました。 +1。 – rayryeng

2

チェック。 mingwを使ってプロジェクトをリンクしようとしたときに、このエラーが発生しました。msvcのライブラリが構築されていました。異なる場合は、プロジェクトで使用しているプラ​​ットフォーム用に構築してください。

Boostを初めて使用したとき、mingwをプロジェクトに使用していましたが、msvc用に構築されたライブラリのデフォルトパラメータで構築しました。 しかし、CMakeはヘッダーとライブラリを見つけました。ライブラリ機能を使用してコンパイルを開始するまで、すべてが正常に見えました。その結果OPでエラーが発生しました。 toolset=gccにブーストを再構築

は(私は、Windows、CMakeの+ MinGWのを使用していた)、それを解決しました。

関連する問題