[英]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.