この問題に関する多くのSOの質問を読んだ後、私はそれを動作させることができませんでした。私は、boost_1_60_0をダウンロードした後、私はそれを作成するためのコマンドを実行しました:Ubuntu x64のBoostとのリンク
sudo ./bootstrp.sh --prefix=/home/ricardo/boostlib
sudo ./b2 install -j8
は、私もこのようなb2
を実行してみました:
sudo ./b2 install -j8 architecture=x86 address-model=64
は関係ありません。エラーは常に同じです:
main.cpp:(.text+0x7e): undefined reference to `boost::system::generic_category()'
main.cpp:(.text+0x8a): undefined reference to `boost::system::generic_category()'
main.cpp:(.text+0x96): undefined reference to `boost::system::system_category()'
ええ、私は知っています。リンクエラー。-lboost_system
とすべてで実行する必要があります。はい、-L/home/ricardo/boostlib/lib
を入力してください。知っている。
これは私のcmakeのは、次のようになります。
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -L/home/ricardo/boostlib/lib -lboost_system -Wl,--verbose")
include_directories("/home/ricardo/boostlib/include")
あなたは尋ねるかもしれない:-Wl,--verbose
の出力は何ですか?驚くべきことに、libboost_system.soが見つかりました。
attempt to open /home/ricardo/boostlib/lib/libboost_system.so succeeded
-lboost_system (/home/ricardo/boostlib/lib/libboost_system.so)
大丈夫です。図書館が見つかりました。私はまだいくつかの選択肢を見つけることを試みている、何もこれまで動作するようです。だから、私はそれをブーストとリンクしていて、boost_systemが見つかったとしても、プログラムはまだコンパイルされません...なぜですか?誰かが私を説明できますか?
編集:How to link C++ program with Boost using CMakeが動作しているようです。なぜ私の方法がうまくいかないのか知りたいのですが、CMakeとMakeを使わずにg ++コンパイラだけを使ってboostにリンクしたいときはどうすればいいですか?私はOpenblasとのリンクを正常に行うことができたので、なぜBoostと連携していないのだろうかと思います。
Edit2:これは私がmake VERBOSE=1
を実行した後に得たg ++コマンドで、ソースが依存関係の後に置かれていることがわかりました。
-std=c++11 -L/home/ricardo/boostlib/lib -lboost_system CMakeFiles/prophet-service.dir/main.cpp.o -o prophet-service -rdynamic
そして、これは私の現在のcmakeのファイルです:
cmake_minimum_required(VERSION 3.2)
project(prophet-service)
set(SOURCE_FILES
main.cpp)
include_directories("/home/ricardo/boostlib/include")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -L/home/ricardo/boostlib/lib -lboost_system")
add_executable(prophet-service ${SOURCE_FILES})
また、私はlibbost_system.a
ファイルを持っていないようです。少なくとも今私は.soファイルの代わりに.aファイルが必要であることを知っています。
VERBOSE = 1 – xaxxon
リンカからフルリンクライン出力を投稿してください '.a'のファイルが必要です。私は私のUbuntuのオペレーティングシステム上でlibboost_system.aを検索する場合
は例えば、私は次のよう見つけます'.so'ファイルではありません。システムにロケートがインストールされている場合は、 'locate libboost_system.a'を実行して見つけてください。 – kenba
cxxflagsは通常コンパイルのためにリンクするために、ldflagsのようなものを使う方が良いでしょう。 –