cmake to link to dll without lib

cmake to link to dll without lib

我得到了一个没有库的 dll。 该 dll 带有 hpp 和 h 文件。 我用 dumpbin 创建了一个 exports.def 文件,用 lib 创建了一个库。

我正在使用以下 CMakeLists.txt

cmake_minimum_required ( VERSION 3.22 )

project ( mytest )

include_directories("${PROJECT_SOURCE_DIR}/libincludedir")

add_executable ( mytest main.cpp)

target_link_libraries ( mytest LINK_PUBLIC ${PROJECT_SOURCE_DIR}/libincludedir/anewlib.lib  )

原始dll和创建的lib和h、hpp文件都在libincludedir中。 Dll 也被复制到 exe 所在的 bin 目录。

我没有发现 lib 的链接器错误,但是在包含 headers 中定义的函数没有找到主体。类型未定义。 类 不完整。

我该如何解决这个问题?我可以继续得到的东西还是应该要求更多?

假设您已正确创建 .lib,这就是您设置 linkable 的方式:

cmake_minimum_required(VERSION 3.22)
project(example)

add_library(anewlib::anewlib SHARED IMPORTED)
set_target_properties(
  anewlib::anewlib
  PROPERTIES
  IMPORTED_IMPLIB "${PROJECT_SOURCE_DIR}/libincludedir/anewlib.lib"
  IMPORTED_LOCATION "${PROJECT_SOURCE_DIR}/libincludedir/anewlib.dll"
  IMPORTED_NO_SONAME "TRUE"
  INTERFACE_INCLUDE_DIRECTORIES "${PROJECT_SOURCE_DIR}/libincludedir"
)

add_executable(mytest main.cpp)
target_link_libraries(mytest PRIVATE anewlib::anewlib)

始终 link 到目标,因为它们为 CMake 提供的信息比原始库文件多得多。在这里,我们告诉 CMake .lib.dll 的位置,它没有 SONAME(*nix 唯一的东西,无论如何,但很好地包含),并且linkees 应该用来查找其关联的包含路径 headers.

然后当您 link mytest 时,mytest 将构建正确的 link 行,并且它会看到正确的 headers。