2017-09-16 242 views
0

儘管我對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和感謝

+0

它,我由CMake推薦在'target_link_libraries'調用中使用**完整路徑**到庫。像'TARGET_LINK_LIBRARIES(some_project PUBLIC「Z:/folder/subfolder/lib/problematic_old_library.lib)''。 – Tsyvarev

+0

我確認這刪除了問題,但引入了可能與CMakeList.txt文件中的其他問題相關的新問題。謝謝! – JSH

回答

0

看來,當文件無法找到(https://msdn.microsoft.com/en-us/library/y6b12xkc.aspx

也許你的路徑包含在裏面的空間出現LNK1181錯誤。當您使用空格,你要逃避他們像\

Z:/folder with space name/subfolder/lib

應該是這樣的路徑:

Z:/folder\ with\ space\ name/subfolder/lib 

在另一邊,似乎你可以使用雙\到文件夾是這樣的:

"Z:\\folder with space name\\subfolder\\lib" 

嘗試既看到的結果

相關問題