【问题标题】:How to run C++ program that use PDCurses on other computers?如何在其他计算机上运行使用 PDCurses 的 C++ 程序?
【发布时间】:2011-08-24 06:20:23
【问题描述】:

我最近开始在我正在开发的 C++ 游戏中使用 PDCurses。当我在自己的机器(Windows)上编译程序并运行 .exe 时,一切正常。

当我将该 .exe 放到另一台没有 PDCurses 的计算机上并尝试运行它时,我收到有关缺少 pdcurses.dll 文件的错误消息。

在网上做了一些研究后,我发现包含 .dll 文件和 .exe 应该可以让它运行,但它对我不起作用。

这就是我使用 MinGW 编译程序的方式:g++ game.cpp -o game -lpdcurses

所以我的问题是,如何让这个程序在没有设置 PDCurses 的计算机上运行,​​还有,有没有办法通过将 .exe 与系统需要的任何其他文件结合起来来做到这一点运行程序?我还读到您可以进行某种静态链接,但到目前为止我还没有找到方法。

提前感谢您的帮助。

注意:如果重要,我会按照本教程设置 PDCurses:http://comptb.cects.com/1848-adding-pdcurses-to-mingw 不确定这是否是最好的方法,但我可以在我的计算机上编译和运行使用 pdcurses 的 C++ 代码。


很抱歉没有发布确切的消息。他们在这里:

当我没有将 pdcurses.dll 文件与可执行文件一起包含时,我得到的第一个说:

程序无法启动,因为您的计算机中缺少 pdcurses.dll。尝试重新安装程序来解决这个问题。

包含 pdcurses.dll 后得到的第二个:

*程序无法启动,因为您的计算机中缺少 libcc_s_dw2-1.dll。尝试重新安装程序以解决此问题。*

【问题讨论】:

  • 不起作用是什么意思?您收到了哪些确切的错误消息?
  • “工作”是指它根本不运行。我只是给我关于丢失 pdcurses.dll 的错误
  • 如果将pdcurses.dll 复制到与game.exe 文件相同的文件夹中会发生什么?那么它应该可以工作了。
  • 当我尝试这样做时,它不再给我关于 pdcurses.dll 的错误,但它确实给了我关于另一个丢失的 .dll 文件的不同错误。你知道我编译程序并同时将它与.dll链接的方式吗?
  • 您也只需将“不同的缺失.dll”放入应用程序目录即可。大概。当然,如果你真的知道那个 dll 是什么(它在错误对话框中明确命名,你只需要阅读),那么我们也许可以给你更好的帮助。

标签: c++ dll portability pdcurses


【解决方案1】:

您需要包含您链接的所有动态库。请注意许可,尽管 IIRC 对 MinGW 的影响不大。

如果你有 MinGW shell,应该有一个“ldd”命令。尝试在 game.exe 上运行它,它会告诉您运行程序所需的库。您需要将它们全部包含在 exe 中。

如果你想尝试移除依赖噩梦,你可以在你的 gcc 链接命令中使用静态链接 (-static) 选项。如果您没有安装库的静态版本,您可能无法真正做到这一点。这还有其他含义 - 您的 exe 会更大,并且操作系统的共享共享页面代码将不起作用,因为它无法告诉您与其他应用程序共享哪些部分(DLL 代码)。实际上,您的应用程序将因此使用更多内存,尽管它可能微不足道。

【讨论】:

    【解决方案2】:

    另一种选择是获取 PDCurses 的源并将其编译为静态库。这样您就不必卷入 DLL 地狱。

    将其编译为 C 库而不是 C++ 库,您应该可以开始了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      相关资源
      最近更新 更多