CMake如何将依赖包静态链接至共享库(DLL)?
如何将libzippp静态链接进你的Main.dll
首先要确保你使用的是静态版本的libzippp:
- 若从源码编译libzippp,编译时添加
-DBUILD_SHARED_LIBS=OFF参数,生成并安装静态库。 - 若用预编译包,需下载对应平台的静态库版本。
- 若从源码编译libzippp,编译时添加
修改CMake配置,强制链接静态库:
cmake_minimum_required(VERSION 3.0.0) project(Main VERSION 0.1.0) add_library(Main SHARED Main.cpp) # 强制让find_package优先查找静态库版本 set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) find_package(libzippp REQUIRED) # 链接静态libzippp,所有依赖会被打包进Main.dll target_link_libraries(Main PRIVATE libzippp::libzippp) # (可选)针对MSVC环境,配置静态CRT避免额外的运行时dll依赖 if(MSVC) target_compile_options(Main PRIVATE /MT$<$<CONFIG:Debug>:d>) endif()
- 原理说明:
设置BUILD_SHARED_LIBS=OFF会让CMake在查找依赖时优先选择静态库目标,链接阶段会把libzippp的代码直接合并到你的Main.dll中,不会生成单独的libzippp.dll。如果libzippp依赖zlib,静态版本的libzippp也会链接静态zlib,整个依赖链都会被打包进去。
内容的提问来源于stack exchange,提问作者Ford O.
相关产品推荐
相关产品推荐

