首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ CMake链接错误: LNK1181:无法打开输入文件"x.lib“

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

Stack Overflow用户
提问于 2017-09-16 10:07:35
回答 1查看 3.3K关注 0票数 0

尽管我对C++非常陌生,但我还是通过这个项目向Python公开了一个旧的C++库,我正在使用Pybind11和CMake。C++库链接到一个名为"problematic_old_library.lib“的文件。此.lib位于服务器驱动器上。当将C++代码绑定到CMakeList.txt时,需要一个包含和链接到所需文件的CMakeList.txt文件。因为我没有CMake的经验,所以我很确定我在这里做错了什么。

下面是我的CMakeList.txt文件以供参考(文件的名称被更改):

代码语言:javascript
运行
复制
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"(上面列出了两个文件),.The文件"mapping.cpp“使用名为"problematic_old_library”的第三方库。然而,这会产生一个致命错误。

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

是什么引起的?

我试着从文档中寻求帮助。然而,当使用CMake时,我发现理解${某某}表示法是非常令人困惑的。我想要的是“硬编码”示例,说明如何链接到一个旧库,如果可能的话,最好不要使用${某某}符号。

/

下面要进一步参考的是我的CMakeList.txt文件的附加版本,它包含导致这个问题的"x.lib“文件的路径的所有组合:

代码语言:javascript
运行
复制
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和感谢

EN

回答 1

Stack Overflow用户

发布于 2017-09-16 11:03:27

当找不到文件时,似乎出现了LNK1181错误(https://msdn.microsoft.com/en-us/library/y6b12xkc.aspx)

也许你的路径中有空格。当您使用空格时,您必须像用\那样转义它们

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

应该是这样的:

代码语言:javascript
运行
复制
Z:/folder\ with\ space\ name/subfolder/lib

在另一边,您似乎可以对文件夹使用double \,如下所示:

代码语言:javascript
运行
复制
"Z:\\folder with space name\\subfolder\\lib"

试着同时看到结果

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46252663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档