在Windows上运行在Cygwin中编译的C++可执行文件


Running C++ executables compiled in Cygwin on Windows

创意
我已经在Cygwin上使用G++编译了一个C++exe,我希望能够通过PHP将该exe的输出输出到我的HTML中。也就是说,假设我有一个C++可执行文件"test.exe",它在运行时输出"Hello,World!"。那么从逻辑上讲,我应该能够进行

<?=exec("./test.exe")?>

将test.exe文件的输出发送到该文件。

问题
我正在Win7上的本地WAMP服务器上测试这个。显然,Win7 WAMP上的execsystem调用通过Windows命令提示符,这意味着它运行的是批处理而不是bash。由于某些原因,批处理不喜欢Cygwin编译的可执行文件,给出错误:

"程序无法启动,因为您的计算机请尝试重新安装程序以解决此问题。"

那么,如何使windows批处理能够执行cygwin编译的文件呢?

您可以做一些事情:

  1. 您可以使用Visual Studio编译应用程序(我相信Microsoft提供了免费版本…Visual Studio学习版)。这是我个人要走的路线。您不需要依赖cygwin DLL(除非您在cygwin安装的某个部分进行编译),而且您的可执行文件在Windows系统中更具可移植性
  2. 您可以将cygwin1.dll的位置放入系统PATH环境变量中。这样做的优点是将来使用cygwin构建的可执行文件可以成功运行,但缺点是,如果你想分发你的应用程序,其他用户将无法开箱即用地运行它
  3. 您可以将cygwin1.dll从cygwin安装的/bin目录复制到与可执行文件相同的文件夹中。这是可移植的(在Windows系统中……在某种程度上),但缺点是它可能违反Cygwin许可证(我不确定,没有阅读许可证)。我只推荐这条路线用于测试目的

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

这里的错误信息非常清楚。使用Cygwin编译的可执行文件需要cygwin1.dll才能运行。简单的方法是将cygwin1.dll复制到与可执行文件相同的位置,这样它就可以找到它

如果你不太喜欢这种依赖性,你可以尝试用MinGW构建你的你好世界,因为它没有这种依赖性。

将cygwin1.dll复制到包含test.exe 的目录中

请参阅程序可以';t启动,因为缺少cygwin1.dll。。。在Eclipse CDT 中