【问题标题】:Creating redistrubutable C/C++ DLLs with VS2012使用 VS2012 创建可再发行/C++ DLL
【发布时间】:2015-01-23 21:15:36
【问题描述】:

我有一个 VS2012 C++ 项目,它使用 vc.mak 生成文件来构建解决方案。我构建了一个或多或少相同的 .exe 和 .dll(exe 有一个 main() 是唯一的区别)。

我需要做什么才能使这两段代码可以在多个版本的 Windows 上运行?我使用的是 Windows 8.1 Pro,我当然可以运行我的 exe 并使用 dll 正常。我构建了一个新的 Win8.1 Pro VM,我发现尝试运行 .exe,它缺少 MSVCR110.dll 文件,所以我复制了它并运行。之后我的共享库也可以使用了。

我将项目的整个“安装”文件夹复制到我的同事 windows 8 框中,Exe 将运行,但我无法加载 .dll

我需要复制什么才能让我的 dll 在任何 Windows 机器上运行?

【问题讨论】:

  • 请注意,如果 DLL 和加载它的应用程序使用不同的运行时库,则存在一些限制。例如,你不能将文件描述符从一个传递到另一个,你不能 malloc() 一个内存块,而 free() 另一个。

标签: c++ windows visual-studio-2012 dll


【解决方案1】:

选择其中一个,您应该更喜欢第三个选项:

  • 我的计算机上的一些计算机游戏在其可执行文件所在的目录中只有一个 msvcr*.dll,因此您可以选择这种方法 - 只需将该 DLL 与您的可执行文件一起提供即可。您可以在 %WINDIR%\System32 或 %WINDIR%\SysWOW64 中找到该 DLL,或从任何已将其复制到其目录中的程序“借用”它,并希望该程序的作者不会对其进行修改。
  • 另一种选择是使用 /MT 开关编译该程序 /MD (或调试版本中的 MTd 而不是 MDd),但我没有 使用makefile的经验,所以我不能说做起来有多难。和 这种方法运行时库静态链接到您的 可执行文件 - 但要准备好让可执行文件具有更大的大小。
  • 第三个选项是创建一个安装程序来安装您的 应用程序和 Visual C++ Redistributable for Visual Studio 2012 as 好吧 - 或者手动下载并安装该可再发行组件。

【讨论】:

  • 谢谢 - 我很确定我能够将可执行文件与 exe/dll 静态链接。在这种情况下,我试图避免使用安装程序,因为我希望我的程序完全包含在 USB 驱动器上运行
【解决方案2】:

Here是微软的C++应用部署指南,有点臃肿但值得一看。

您可以使用方便的Dependency Walker 工具找出您的应用程序所依赖的 DLL。通常在使用动态运行时构建时,它们至少是 msvcr*.dll - Microsoft C 运行时和 msvcp*.dll - Microsoft C++ 运行时,here 是更详细的列表。要部署 Microsoft 运行时,您可以随应用程序一起提供官方的 Visual C++ Redistributable 安装程序 (VCRedist_x86.exe)。或者,对于从 2010 年开始的 Visual C++,您可以将 DLL 放在包含可执行文件的目录中,对于以前的版本,该进程是 a bit more complicated

为了能够在 Windows XP 上运行应用程序,请确保在项目属性的 General 选项卡上选择 Platform Toolset with XP support(但即使这样,运行时也不会在 SP2 之前的系统上启动)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2012-11-09
    • 2016-01-17
    • 1970-01-01
    相关资源
    最近更新 更多