C++ CMake针对windows上的共享库进行链接:关于找不到.lib文件的错误

C++ CMake针对windows上的共享库进行链接:关于找不到.lib文件的错误,c++,windows,cmake,C++,Windows,Cmake,我在CMake中有一个库定义,它构建了一个共享库 一小部分文件,我已经在linux和windows上编译好了 然而,我还有另一个库链接到共享库,它在linux上运行得很好,但是在windows上,我在链接期间收到了一条类似的消息或“error can't find Release/nnet.lib”。我有什么特别的事情要做才能把它送到 windows上的链接 编辑,例如: 主共享库(更改文件名以保护用户): 然后我构建了一个python模块,该模块链接到库中: # Build python mo

我在CMake中有一个库定义,它构建了一个共享库 一小部分文件,我已经在linux和windows上编译好了

然而,我还有另一个库链接到共享库,它在linux上运行得很好,但是在windows上,我在链接期间收到了一条类似的消息或“error can't find Release/nnet.lib”。我有什么特别的事情要做才能把它送到 windows上的链接

编辑,例如:

主共享库(更改文件名以保护用户):

然后我构建了一个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:无法打开输入 文件“Release\nnet.lib”


在构建其他库时。注意:在构建nnet时不会抛出任何错误。

啊,我的问题是在构建库时忘记在适当的位置包含一个_udeclspec(dllexport)(你能告诉我我不经常使用windows编程吗?)。

在windows上否。如果没有导出符号,将生成lib导入库文件。要创建文件,至少需要一个dllexport。我以前也曾对此进行过抨击。或者,您也可以在
CMakeLists.txt
中放置一个
集(CMAKE\u WINDOWS\u EXPORT\u ALL\u SYMBOLS ON)
,然后将所有符号导出,而无需
\u declspec(dllexport)
# Build python module
ADD_LIBRARY            (other_lib SHARED ${CMAKE_SOURCE_DIR}/src/boost/boost_main.cc)
TARGET_LINK_LIBRARIES  (other_lib nnet   ${PYTHON_LIBRARIES})