如何配置我的库和依赖项以将我的应用程序编译为静态

问题描述 投票:0回答:1

我正在使用 Visual Studio 2022、C++、x64 编写一个应用程序,并在 vcpkg 的帮助下安装了库。它们是动态链接库。

我想将我的应用程序作为静态使用,在另一台电脑上运行它,而不需要安装框架,或制作安装程序或其他依赖项,只需一个 .exe 即可。也许叫做“便携式”?

我的AI助手说我应该先更改为Release,并将代码生成选项更改为“/MT”

我这样做了,我开始尝试链接问题,当然是因为我的库被配置为动态。但是...

这正是我在这条消息中遇到的问题吗?还是我还有更多问题?我真的无法理解这条消息。

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2001 unresolved external symbol "__declspec(dllimport) public: class std::locale __cdecl std::basic_streambuf<char,struct std::char_traits<char> >::getloc(void)const " (__imp_?getloc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEBA?AVlocale@2@XZ)    WxWidgets_Structured    C:\Users\Juan\source\repos\WxWidgets_Structured\ConfigManager.obj   1   
Error   LNK1120 1 unresolved externals  WxWidgets_Structured    C:\Users\Juan\source\repos\WxWidgets_Structured\x64\Release\WxWidgets_Structured.exe    1   
c++ static-linking
1个回答
0
投票

一旦您想使用通过 DLL 获得的东西,您就无法构建静态构建的程序。句号。

可能的方法:

  • 大多数库都是动态库或静态库:验证(两次)您使用的包是否也作为静态库提供

  • 有许多一个文件打包程序工具。例如

    py2exe
    pyinstaller
    采用 Python 解释器、一个或多个脚本和所需的库,将所有内容打包到一种 zip 存档中,以及将所有内容解压到临时文件夹中的 bootstrap,然后启动 Python 解释器及其主要脚本。您可以调整自解压 zip 文件,以便在解压包含程序和所需 DLL 的存档后立即启动您的程序。

    但这实际上归结为首先构建一个安装程序,然后让安装程序立即运行代码并在使用后清理安装。你可以搜索是否可以调整 NSIS 的 InnoSetup 来获得...

© www.soinside.com 2019 - 2024. All rights reserved.