3

ブーストでコンパイルしようとすると、すべてが Windows でうまくいきますが、Linux でコンパイルしようとすると、SETコマンドで指定された構成が FindBoost で考慮されていないようです。

次のことを行うときは、

set(Boost_USE_STATIC_LIBS        OFF)
set(Boost_USE_MULTITHREADED      OFF)

find_package(Boost COMPONENTS system REQUIRED)
if (Boost_FOUND)
MESSAGE(${Boost_SYSTEM_LIBRARY})
endif ()

出力は/usr/lib/libboost_system-mt.a、ライブラリから離れた静的でマルチスレッドのバージョンのようです。私は何を間違っていますか?

4

1 に答える 1

3

Boost_USE_STATIC_LIBS を OFF に指定するFindBoost.cmakeを見ると、それらをオーバーライドするのではなく、検索にデフォルトのサフィックス値 (CMAKE_FIND_LIBRARY_SUFFIXES) を使用します。私のLinuxマシンで

MESSAGE(${CMAKE_FIND_LIBRARY_SUFFIXES})

戻り値

.そう

そう

set(Boost_USE_STATIC_LIBS        OFF)

.so ファイルが .a よりも優先される結果となるヒントを提供しますが、一致する .so が見つからない場合はそれらを含めます。その場合、問題は、共有オブジェクトがインストールされていないか、FindBoost.cmake が見ていない場所にインストールされている可能性が高いことです。この再実行 cmake を解決するには

cmake -DBoost_DEBUG=ON 

出力を見て、cmake がブースト ライブラリを探している場所を確認し、それらの場所を調べて .so ファイルが実際に存在するかどうかを確認します。それらが存在する場合は、設定したヒントと一致する方法で名前が付けられていることを確認してください。たとえば、libboost_system-mt.so は一致しません。

マルチスレッドに関しては、Linux ディストリビューションでは、「-mt」のないライブラリは「-mt」のあるライブラリへの単なるシンボリック リンクである場合があるため、その場合は Boost_USE_MULTITHREADED を OFF に設定すると、マルチスレッド ライブラリがリンクされます。

于 2012-12-14T13:50:24.820 に答える