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

时间:2017-09-16 10:07:36

标签: c++ cmake

尽管我对C ++很陌生,但我得到了这个项目,将一个旧的C ++库暴露给Python,我正在使用Pybind11和CMake。 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的第三方库。但是,这会产生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和谢谢

1 个答案:

答案 0 :(得分:1)

似乎无法找到文件时出现LNK1181错误(https://msdn.microsoft.com/en-us/library/y6b12xkc.aspx

也许你的路径中包含空格。当您使用空格时,您必须像\

一样逃避它们

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

应该是这样的:

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

另一方面,您似乎可以对文件夹使用双\:

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

同时尝试查看结果