CMake:创建包含依赖项而不是单独的 dll 的 DLL
CMake: Create DLL including dependencies instead of separate dll's
我正在用 C++ 为 Windows 和 Mac OS 编写 SDK,并且我正在使用 CMake。
windows,我希望编译后的 DLL 包含所有必要的依赖项,而不是为我正在使用的所有第三方库提供单独的 DLL。
以下是 MakeFile 的相关部分:
find_package(OpenSSL REQUIRED)
find_package(CURL CONFIG REQUIRED)
find_package(nlohmann_json 3.2.0 REQUIRED)
find_package(spdlog REQUIRED)
find_package(unofficial-sqlite3 CONFIG REQUIRED)
....
add_library(${PROJECT_NAME} SHARED ${SRC_FILES})
...
target_link_libraries(${PROJECT_NAME} PRIVATE OpenSSL::Crypto CURL::libcurl nlohmann_json::nlohmann_json spdlog::spdlog_header_only unofficial::sqlite3::sqlite3)
这会生成以下单独的 DLL:
fmt.dll
libcrypto-1_1.dll
libcurl.dll
sqlite3.dll
zlib1.dll
是否可以创建一个包含所有依赖项的库,就像在 Mac OS 上使用生成的 dylib 一样?
为简单起见,我使用 Vcpkg,但您应该将依赖项编译为静态库而不是共享库。
如果您使用的是 vcpkg,则可以像这样静态安装依赖项
vcpkg.exe install openssl:x86-windows-static
确保 运行 CMake 的 VCPKG_TARGET_TRIPLET
设置为 x86-windows-static
或您使用的任何平台。
如您所见,example.dll 现在静态链接到 OpenSSL。
干杯
我正在用 C++ 为 Windows 和 Mac OS 编写 SDK,并且我正在使用 CMake。 windows,我希望编译后的 DLL 包含所有必要的依赖项,而不是为我正在使用的所有第三方库提供单独的 DLL。
以下是 MakeFile 的相关部分:
find_package(OpenSSL REQUIRED)
find_package(CURL CONFIG REQUIRED)
find_package(nlohmann_json 3.2.0 REQUIRED)
find_package(spdlog REQUIRED)
find_package(unofficial-sqlite3 CONFIG REQUIRED)
....
add_library(${PROJECT_NAME} SHARED ${SRC_FILES})
...
target_link_libraries(${PROJECT_NAME} PRIVATE OpenSSL::Crypto CURL::libcurl nlohmann_json::nlohmann_json spdlog::spdlog_header_only unofficial::sqlite3::sqlite3)
这会生成以下单独的 DLL:
fmt.dll
libcrypto-1_1.dll
libcurl.dll
sqlite3.dll
zlib1.dll
是否可以创建一个包含所有依赖项的库,就像在 Mac OS 上使用生成的 dylib 一样?
为简单起见,我使用 Vcpkg,但您应该将依赖项编译为静态库而不是共享库。
如果您使用的是 vcpkg,则可以像这样静态安装依赖项
vcpkg.exe install openssl:x86-windows-static
确保 运行 CMake 的 VCPKG_TARGET_TRIPLET
设置为 x86-windows-static
或您使用的任何平台。
如您所见,example.dll 现在静态链接到 OpenSSL。
干杯