如何将预构建的共享库链接到可执行文件(CMake)?

时间:2019-04-21 15:23:22

标签: cmake

我对CMake和一般的构建过程不太了解。 我正在尝试将预构建的共享库(zlibd.dll)链接到可执行目标(我在Windows上)。 为了做到这一点,我创建了一个新的导入目标,设置其IMPORTED_LOCATION属性,然后将该目标链接到我的可执行文件...但是当我尝试构建时,出现make错误。

项目结构非常简单,只是一个包含以下文件的文件夹:CMakeLists.txt,main.cpp,zlibd.dll(和构建文件夹)。

这是CMakeLists.txt的内容:

cmake_minimum_required(VERSION 3.14)

project(hey)

add_library(zlib SHARED IMPORTED GLOBAL)
set_target_properties(zlib PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/zlibd.dll")

add_executable(hello main.cpp)
target_link_libraries(hello zlib)

这是我尝试构建项目时遇到的错误:

mingw32-make.exe[2]: *** No rule to make target 'zlib-NOTFOUND', needed by 'hello.exe'.  Stop.
CMakeFiles\Makefile2:71: recipe for target 'CMakeFiles/hello.dir/all' failed
mingw32-make.exe[1]: *** [CMakeFiles/hello.dir/all] Error 2
Makefile:82: recipe for target 'all' failed
mingw32-make.exe: *** [all] Error 2

如果我有一个静态库而不是动态库,这种方法不会给我带来任何错误,并且可以成功构建。我也尝试了其他共享库,并且错误是相同的。 此外,我尝试在add_library命令中将'SHARED'关键字更改为'OBJECT',这次我没有遇到任何错误。

为什么静态库没有错误,而动态库却出现此错误? 有没有其他方法可以将动态库链接到可执行目标?

0 个答案:

没有答案