0

我最近开始在我正在开发的 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。尝试重新安装程序以解决此问题。*

4

2 回答 2

0

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

将它编译为 C 库而不是 C++ 库,你应该很高兴。

于 2013-10-05T20:43:14.470 回答
0

您需要包含您链接的所有动态库。小心许可,尽管 IIRC 并没有多少会用 MinGW 咬你。

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

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

于 2011-08-25T01:25:52.547 回答