尽管我对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