C++ CMake 链接错误:LNK1181:无法打开输入文件"x.lib"

C++ CMake Linking error: LNK1181: Cannot open input file "x.lib"

本文关键字:输入 文件 lib 链接 CMake 错误 LNK1181 C++      更新时间:2023-10-16

尽管我是C 的新事实,但我还是让这个项目将一个旧的C 库曝光至Python,我正在使用Pybind11和Cmake。C 库链接在此处的文件中,称为" alisional_old_library.lib"。这个.lib生活在服务器驱动器上。将C 代码绑定到python时,需要包含包含和链接到所需的文件。由于我没有Cmake的经验,所以我很确定我在这里做错了什么。

这是我的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"的文件夹(上面列出的两个文件)。文件"映射"。使用名为" alising_old_library"的第三方库。但是,这会产生1个致命错误。

LINK: fatal error LNK1181: cannot open input file 'problematic_old_library.lib'

是什么原因造成的?

我试图从文档中搜索帮助。但是,我发现使用cmake时理解$ {件}符号非常困惑。我想拥有的是"硬编码"如果可能的话,最好在没有$ {某物}符号的情况下与旧库链接的示例。

////////////////////////////////////

有关下面的进一步参考,是我的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,谢谢

看来找不到文件时出现LNK1181错误(https://msdn.microsoft.com/en-us/library/y6b12xkc.aspx.aspx)<>

也许您的路径在其中包含空间。当您使用空间时,必须像

那样逃脱它们

路径Z:/folder with space name/subfolder/lib

应该这样:

Z:/folder with space name/subfolder/lib

在另一侧,似乎您可以使用Double 与这样的文件夹使用:

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

尝试两者都查看结果