2017-09-16 309 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" 

尝试既看到的结果

相关问题