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。
我得到了一个没有库的 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。