儘管我對C++相當陌生,但是我得到了這個項目以將一箇舊的C++庫展示給我使用Pybind11和CMake的Python 。 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」(上面列出了兩個文件)。文件「mapping.cpp」使用名爲「problematic_old_library」的第三方庫。但是,這會產生1個致命錯誤。
LINK: fatal error LNK1181: cannot open input file 'problematic_old_library.lib'
是什麼原因造成的?
我試圖從文檔搜索的幫助。但是,我覺得很困惑,瞭解$ {事}符號使用CMake的時候,我會喜歡擁有如何與舊圖書館鏈接的「硬編碼」示例,如果可能,最好不要使用$ {something}符號。
///////////////對於下面進一步參考是我CMakeList.txt文件的版本附加包括用於路徑導致這一問題的「x.lib所有組合「文件:
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