3

問題なく Linux でコンパイル/リンクする CMake と Boost を使用する C++ プロジェクトがあります。これを Visual C++ 2012 経由で Wi​​ndows に移植する作業を行っています。

私のCMake構成は次のとおりです。

set(BOOST_ROOT ${DEPENDENCY_DIR}/boost/)
set(Boost_USE_STATIC_LIBS   ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME    OFF)
find_package(Boost 1.53 COMPONENTS system date_time chrono serialization filesystem program_options random thread regex unit_test_framework)

message(STATUS "Boost Version:" ${Boost_VERSION})
message(STATUS "Boost Include Dirs:" ${Boost_INCLUDE_DIR})
message(STATUS "Boost Libraries:")
foreach(lib ${Boost_LIBRARIES})
        message(STATUS ${lib})
endforeach()

include_directories(${Boost_INCLUDE_DIR})

ターゲットtarget_link_librariesで withを使用しています。${Boost_LIBRARIES}また、上記のmessageコマンドは、見つかったすべてのファイルを問題なく表示します。

さらに、必要なライブラリは本来libboost_unit_test_framework-vc110-mt-gd-1_53.libあるべき姿で表示されます。

ライブラリの依存関係のスクリーンショット

ただし、ターゲットの 1 つをビルドすると、

2>LINK : fatal error LNK1104: cannot open file 'boost_unit_test_framework-vc110-mt-gd-1_53.lib'

別の Boost ライブラリを削除しましたが、エラーからリンカが他のライブラリを見つけられるようです。(chronoまたはのようにserialization。)しかし、エラーメッセージは少し異なります。ファイル名の前にlibがあります。

2>LINK : fatal error LNK1104: cannot open file 'libboost_serialization-vc110-mt-gd-1_53.lib'

unit_test_framework のlibboostではなく、 boostで始まるファイルを VC++ が探すのはなぜですか?

4

1 に答える 1

0

では、次の 2 点を確認してください。

  • 指定したパスにファイルが実際に存在し、読み取り権限があることを確認してください。
  • 32 ビット ビルドには 32 ビット .LIB を使用し、64 ビット LIB には 64 ビット .LIB を使用していることを確認してください。
于 2013-04-04T15:48:54.307 に答える