![](/img/trans.png)
[英](CMake build) fatal error LNK1181: cannot open input file 'glew.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.