CMake链接到Windows上的共享库:关于找不到.lib文件的错误

gct*_*gct 5 c++ windows cmake

我在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)
Run Code Online (Sandbox Code Playgroud)

然后我正在构建一个链接在库中的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})
Run Code Online (Sandbox Code Playgroud)

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

致命错误LNK1181:无法打开输入文件'Release \nnet.lib'

在构建other_lib时.注意在构建nnet时不会抛出任何错误.

gct*_*gct 8

啊,我的问题是我忘记在构建库时在适当的地方包含一个__declspec(dllexport)(你能说我不做很多windows编程吗?).

  • 另外,您也可以将set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)放入您的CMakeLists.txt中,然后将导出所有符号,而无需使用__declspec(dllexport)。 (3认同)
  • 在Windows上,如果没有导出符号,则生成.lib导入库文件.您需要至少一个dllexport才能创建该文件.我之前已经打过头了. (2认同)