c++ - 运送运行时库/DLL 的要求

标签 c++ gcc dll runtime mingw

我已经阅读了这两个 SO 问题:Which runtime libraries to ship?License of runtime libraries included in GCC? - 两者都非常有帮助,但不是我想要的。

我一直只编写在我自己的机器上使用的程序,这从来没有给我带来任何问题,但现在我想开始在其他机器上运行软件并且我对运行时要求很谨慎。

编辑:请参阅下面的示例,这是一种误导。

具体来说,如果我在 Windows 机器上编写 C++ 程序,通过 MinGW 使用 gcc 编译,并希望在另一台机器上运行它:

  • 我必须将 libstdc++.dll 与我的程序一起发送吗?
  • 这个单个文件(我假设放在可执行文件的目录中)是否足以让程序运行?

另外,一个相同的示例,只是这次它是一个 Objective-C 程序。将 libobjc.dll 文件发送到另一台机器足以让程序正常执行吗?

我习惯于在安装了开发工具等的机器上运行程序,但现在我想在通用机器( friend 、同事等)上运行它们,但我不太确定是什么做!


编辑:针对 edifice 的回答,我觉得我应该澄清一下我在寻找什么。我知道如何识别我的程序使用的必要 DLL(/dylibs 等)(尽管我习惯于手动完成这项工作;我没有听说过任何工具)。我的问题更多是“我现在该怎么办?”

可能需要一个更一般的例子:

假设我编写了一个程序,其中包含从 C++、C 和/或 Objective-C(2) 代码派生的目标文件。我使用了一些使用 MinGW 的 gcc 成功编译的 Windows API 代码。我还有一个用 Visual Studio (C++) 编写的自定义 DLL。

我已经确定我的程序将在运行时使用哪个 DLL(其中一个可能是 GCC 的 libobjc.dll,我不确定这是否会/应该在 Windows 机器上有所不同,但我想将其作为尽可能通用)-“先决条件 DLL”。

我想在我同事的计算机上运行它,其中大部分运行 Windows 7,但有些现在运行 Windows 8。为了完整起见,从头开始:

  • 我是否需要将先决条件 DLL 传输到同事的计算机?
  • 我应该将它们放在什么目录中? (exe目录/系统目录?)
  • 一旦到位,这些 DLL 的存在是否允许程序正确执行? (假设它知道在哪里可以找到它们)
  • 是否还有任何其他文件应与 DLL 一起传输?

基本上,我试图根据系统运行时要求确定在另一台机器上开发和运行应用程序的整个思考过程。

最佳答案

加载 DLL 时,Windows 首先查找的是 exe 所在的目录。因此将 DLL 放在那里可能会很好。

不过,对于 Microsoft DLL,我认为让您的同事安装 Visual C++ 运行时更有意义,它是 Microsoft 的一个可再分发包。理想情况下,您可以使用 WiX 之类的工具制作一个安装程序,它会为您安装该先决条件,但您也可以只告诉您的同事去做。

如果您包含来自 gcc 的 DLL,请确保在您的软件中包含一个许可证文件,因为 GPL 需要它。

关于c++ - 运送运行时库/DLL 的要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14016330/

相关文章:

c++ - 调试断言失败 : expression : string subcript out of range

c# - 在运行时用另一个窗口控件替换窗口控件

gcc - static_cast/float/bitset/const 怪异

c++ - 在同一个进程中加载​​同一个 DLL 的 2 个版本

c++ - 如何将bmp加载到GLubyte数组中?

c++ - Cereal 序列化和多态性

gcc - 了解 gcc 生成的优化汇编代码

c++ - 在 .cpp 文件之外使用模板化函数而不在 .hh 文件中声明它

windows - 如何在 DLL 中查找特定指令的内存地址

c - MinGW:使用 __declspec(dllexport) 或 __attribute__((visibility ("default")))?