繁体   English   中英

cmake 链接到 dll 没有 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 中没有收到 linker 错误,但在包含头文件中定义的函数没有找到正文。 类型未定义。 课程不完整。

我该如何解决? 我可以在得到的东西上取得进展还是我应该要求更多?

先谢谢了。

假设您正确创建了.lib ,这就是您设置可链接的方式:

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)

始终链接到目标,因为它们为 CMake 提供了比原始库文件更多的信息。 在这里,我们告诉 CMake 关于.lib.dll的位置,它没有 SONAME (无论如何,只有 *nix 的东西,但很好包含),以及链接者应该包含的包含路径用于查找其关联的标头。

然后,当您将mytest链接到它时, mytest将构建一个正确的链接行,并且它将看到正确的标题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM