运送运行时库/ DLL的要求

Eph*_*era 6 c++ dll gcc mingw runtime

我已经阅读了这两个SO问题:要运送哪些运行时库?GCC中包含的运行时库的许可证? - 两者都非常有帮助,但不是我想要的.

我总是编写程序在我自己的机器上使用,这从来没有给我带来任何问题,但现在我想开始在其他机器上运行软件,我对运行时要求保持警惕.

编辑:见下面的例子,这是误导.

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

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

另外,一个相同的例子,除了这次是Objective-C程序.是否将libobjc.dll文件发送到足以允许程序正常执行的其他计算机?

我习惯在安装了开发工具等的机器上运行程序,但现在我想在通用机器(朋友,同事等)上运行它们,我不太清楚该做什么!


编辑:为了回应大厦的回答,我觉得我应该澄清一下我在寻找什么.我知道如何识别我的程序使用的必要的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一起传输?

基本上我正在尝试确定在系统运行时要求方面在另一台机器上开发和运行应用程序的整个思维过程.

Dav*_*son 5

加载DLL时,Windows看起来的第一个位置是exe所在的目录.因此,将DLL放在那里可能会正常工作.

但是对于Microsoft DLL,我认为让你的同事安装Visual C++运行时更有意义,Visual C++运行时是Microsoft的可再发行软件包.理想情况下,您可以使用类似WiX的东西制作安装程序,它会为您安装该先决条件,但只需告诉您的同事即可.

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