【问题标题】:CMake linking against shared library on windows: error about not finding .lib fileCMake链接到Windows上的共享库:关于找不到.lib文件的错误
【发布时间】:2010-12-28 19:49:27
【问题描述】:

我在 CMake 中有一个库定义,用于构建一个共享库 一小组文件,我已经在 linux 和 windows 上编译得很好。

但是,我还有另一个链接到共享库的库,它在 linux 上运行良好,但是,在 Windows 上,我收到一条消息或“错误找不到 Release/nnet.lib”链接时间。有什么特别的事情我必须做才能做到这一点 Windows 上的链接?

编辑,示例:

主共享库(更改文件名以保护无辜者):

ADD_LIBRARY(nnet SHARED
  src/nnet/file_1.cc src/nnet/file_3.cc  
  src/nnet/file_2.cc src/nnet/file_4.cc)

然后我正在构建一个链接到库中的 python 模块:

# Build python module
ADD_LIBRARY            (other_lib SHARED ${CMAKE_SOURCE_DIR}/src/boost/boost_main.cc)
TARGET_LINK_LIBRARIES  (other_lib nnet   ${PYTHON_LIBRARIES})

其余的只是样板文件(例如:在 Windows 上将模块扩展名更改为 .pyd,查找 python 库/头文件等) 然后在 VS 2008 中构建时,我得到:

致命错误 LNK1181:无法打开输入 文件“发布\nnet.lib”

在构建 other_lib 时。请注意,构建 nnet 时不会引发任何错误。

【问题讨论】:

    标签: c++ windows cmake


    【解决方案1】:

    啊,我的问题是我在构建库时忘记在合适的地方包含一个 __declspec(dllexport) (你能说我不经常做 Windows 编程吗?)。

    【讨论】:

    • 在 windows 上,如果没有导出符号,则不会生成 .lib 导入库文件。您至少需要一个 dllexport 才能创建文件。我以前也反对过这个。
    • 或者,您也可以将set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) 放入您的CMakeLists.txt,然后将导出所有符号而不需要__declspec(dllexport)
    猜你喜欢
    • 1970-01-01
    • 2015-10-03
    • 2012-09-30
    • 2016-01-08
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多