VisualStudio CMake 动态库:include/link *单个* dll 中所有使用的函数
VisualStudio CMake dynamic library: include/link all used functions in *single* dll
我有一个 VisualStudio-2019 C++ 项目,它使用 CMake 和 Ninja 构建一个 dll,该项目使用来自 protobuf
和 spdlog
等几个库的函数,我使用 vcpkg
.
构建时,输出被写入四个不同的 dll 文件,main-dll
到 运行 需要所有这些文件。
下面是两个屏幕截图:左边是当前状态,右边是预期状态。
main.dll
文件应该包括它导入的所有函数,编译器不应该为每个库创建单独的 dll。
我不知道旋钮我需要转动,我可以想象几种编辑方式:
- 项目的 C++ 代码(类,内联函数?)
- CMakeList.txt
- MSVC 的参数(编译器、链接器标志)
- 忍者之争
我应该从哪里开始?
设置提到的标志或将 -static
附加到导入库组件没有效果,我达到了
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_EXE_LINKER_FLAGS "-static")
set(CMAKE_MODULE_LINKER_FLAGS "-static")
set(CMAKE_SHARED_LINKER_FLAGS "-static")
set(CMAKE_STATIC_LINKER_FLAGS "-static")
但这一点帮助也没有。
事实证明这是 vcpkg
的问题:
我已经安装了带有三元组 x64-windows
的软件包,它为动态链接而构建,安装软件包
vcpkg install --triplet=x64-windows-static protobuf spdlog
使静态链接成为可能。如果未安装静态变体,构建将静默地进行动态变体。
我有一个 VisualStudio-2019 C++ 项目,它使用 CMake 和 Ninja 构建一个 dll,该项目使用来自 protobuf
和 spdlog
等几个库的函数,我使用 vcpkg
.
构建时,输出被写入四个不同的 dll 文件,main-dll
到 运行 需要所有这些文件。
下面是两个屏幕截图:左边是当前状态,右边是预期状态。
main.dll
文件应该包括它导入的所有函数,编译器不应该为每个库创建单独的 dll。
我不知道旋钮我需要转动,我可以想象几种编辑方式:
- 项目的 C++ 代码(类,内联函数?)
- CMakeList.txt
- MSVC 的参数(编译器、链接器标志)
- 忍者之争
我应该从哪里开始?
设置提到的标志或将 -static
附加到导入库组件没有效果,我达到了
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_EXE_LINKER_FLAGS "-static")
set(CMAKE_MODULE_LINKER_FLAGS "-static")
set(CMAKE_SHARED_LINKER_FLAGS "-static")
set(CMAKE_STATIC_LINKER_FLAGS "-static")
但这一点帮助也没有。
事实证明这是 vcpkg
的问题:
我已经安装了带有三元组 x64-windows
的软件包,它为动态链接而构建,安装软件包
vcpkg install --triplet=x64-windows-static protobuf spdlog
使静态链接成为可能。如果未安装静态变体,构建将静默地进行动态变体。