繁体   English   中英

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

[英]C++ CMake Linking error: LNK1181: Cannot open input file “x.lib”

尽管事实上我对C ++还是很陌生,但我还是得到了这个项目,将一个旧的C ++库暴露给了我正在使用Pybind11和CMake的Python。 C ++库链接到此处称为“ problematic_old_library.lib”的文件。 该.lib位于服务器驱动器上。 将C ++代码绑定到Python时,需要CMakeList.txt-文件,包括包含和指向所需文件的链接。 因为我没有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”的文件夹(上面列出了两个文件)。文件“ mapping.cpp”使用了名为“ problematic_old_library”的第3方库,但这会产生1个致命错误。

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

是什么原因造成的?

我试图从文档中寻求帮助。 但是,我发现使用CMake时理解$ {something}符号非常令人困惑。 我想拥有的是一个“硬编码”示例,该示例如何在可能的情况下最好不使用$ {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和谢谢

找不到文件时,似乎会出现LNK1181错误( https://msdn.microsoft.com/zh-cn/library/y6b12xkc.aspx

也许您的路径中包含空格。 使用空格时,必须像使用\\一样转义空格

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

应该是这样的:

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

另一方面,似乎可以对这个文件夹使用double \\:

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

两者都看结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM