私はこのプロジェクトでPybind11とCMakeを使用している古いC++ライブラリを公開しています。 C++ライブラリは、ここでは "problematic_old_library.lib"というファイルとリンクしています。この.libはサーバードライブ上にあります。 C++コードをPythonにバインドするときは、インクルードと必要なファイルへのリンクを含むCMakeList.txtファイルが必要です。私はCMakeの経験がないので、私はここで何か間違っていると確信しています。ここでC++ CMakeリンクエラー:LNK1181:入力ファイル "x.lib"を開くことができません
は参照のための私のCMakeList.txtファイル(ファイルの名前が変更されている)である:今
cmake_minimum_required(VERSION 2.8.12)
project(some_project)
add_subdirectory(pybind11)
pybind11_add_module(some_project
src/main.cpp
src/mapping.cpp
)
link_directories(Z:/folder/subfolder/lib)
TARGET_LINK_LIBRARIES(some_project PUBLIC problematic_old_library)
、このCMakeList.txtは「some_project」という名前のフォルダに含まれています。フォルダ "some_project"の中に "CMakeList.txt"と "src"という名前のフォルダ(上記の2つのファイル)があります。 "mapping.cpp"ファイルには "problematic_old_library"という名前のサードパーティライブラリが使用されています。この?
が、私はドキュメントからのヘルプを検索してみました。しかし、私はCMakeのを使用している場合、それは非常に混乱$ {何か}表記を理解することがわかります。私は何をだろう引き起こしている何
LINK: fatal error LNK1181: cannot open input file 'problematic_old_library.lib'
好きなのは、可能であれば、$ {something}表記なしで古いライブラリとリンクする方法の "ハードコーディング"の例です。
/////////////
この問題のある「x.lib」につながるパスのすべての組み合わせを含む、CMakeList.txtファイルの追加バージョンを次に示します"ファイル:
make_minimum_required(VERSION 2.8.12)
project(blpbind)
add_subdirectory(pybind11)
pybind11_add_module(blpbind src/main.cpp
src/mapping.cpp
)
# Cannot open
#link_directories("Z:\\blpapi_cpp\\lib")
# Cannot open
#link_directories("Z://blpapi_cpp//lib")
# Cannot open
#link_directories(Z:\\blpapi_cpp\\lib)
# Cannot open
#link_directories(Z://blpapi_cpp//lib)
# Cannot open
#link_directories(Z:/blpapi_cpp/lib)
# Cannot open
#link_directories(Z:/ILMAPI/lib/PROD/LATEST/src/alphalib/blpbind/src/lib)
# Cannot open
#link_directories("Z:/ILMAPI/lib/PROD/LATEST/src/alphalib/blpbind/src/lib")
# Cannot open
link_directories(Z://ILMAPI//lib//PROD//LATEST//src//alphalib//blpbind//src//lib)
# Cannot open
link_directories("Z://ILMAPI//lib//PROD//LATEST//src//alphalib//blpbind//src//lib")
TARGET_LINK_LIBRARIES(blpbind PUBLIC blpapi3_32)
私は次のことをすべて試してみましたが、それぞれのケースでまったく同じエラーが表示されることを確認しました。
Br及びおかげ
それ私を見て、両方を試してみてくださいCMakeが 'target_link_libraries'呼び出しでフルパス**をライブラリに使うように勧めました。 'TARGET_LINK_LIBRARIES(some_project PUBLIC" Z:/folder/subfolder/lib/problematic_old_library.lib ")と似ています。 – Tsyvarev
これは問題を取り除いたが、CMakeList.txtファイルの別の問題に関連している可能性のある新しいものを導入したことを確認しました。ありがとう! – JSH