【问题标题】:Visual Studio C++ turn .exe +.dll into only .exeVisual Studio C++ 将 .exe +.dll 变成只有 .exe
【发布时间】:2013-09-27 16:47:58
【问题描述】:

我有一个使用libcurl 库的程序。为了使 .exe 文件工作,代码编译后,我必须将 libcurl.dll 放在与 exe 文件相同的文件夹中。有没有办法将此 libcurl.dll 文件隐式添加到 .exe 文件中,这样就不需要 dll 文件?

【问题讨论】:

  • 有一种方法可以将 .dll 作为资源放入您的 .exe 中。解压并动态加载它(例如,通过LoadLibrary 或类似的方式),google 一下。
  • UAC 制止了这种情况。将文件打包在一个可执行文件中是很常见的,您肯定以前使用过 setup.exe。或自解压 zip 文件。

标签: c++ visual-studio-2010 dll


【解决方案1】:

您可以将任何有效负载作为自定义资源添加到可执行映像,包括其他二进制文件(请参阅Creating a New Custom or Data Resource)。在应用程序启动期间,您必须提取 .dll 并将其保存到磁盘。这还要求您将库导入标记为/DELAYLOAD(请参阅Specifying DLLs to Delay Load)。否则加载器将由于未解析的导入而失败。

解决您的问题的更自然的方法是将 cURL 编译为静态导入库并静态链接到它。这会将 libcurl 代码编译为最终的可执行映像。可以在How to build cURL static library with SSL support on Windows 找到有关构建静态库的说明。

【讨论】:

    【解决方案2】:

    您可以尝试使用开源pefrmdllembed 将 DLL 合并到您的 EXE 文件中。

    命令行: pefrmdllembed.exe -impinj myprogram.exe libcurl.dll myprogram_withcurl.exe

    它将生成新的“myprogram_withcurl.exe”,您可以使用它来代替原来的 EXE。应该适用于大多数 DLL。

    【讨论】:

      猜你喜欢
      • 2018-09-12
      • 2015-11-04
      • 2017-12-31
      • 2010-10-20
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多