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

时间:2012-01-17 02:28:51

标签: php c++ windows cygwin wamp

理念
我在Cygwin上使用G ++编译了一个C ++ exe,我希望能够通过PHP将该输出输出到我的HTML中。也就是说,假设我有一个C ++可执行文件“test.exe”,它输出“Hello,World!”什么时候跑。然后逻辑上,我应该能够做到

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

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

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

  

“程序无法启动,因为你的网络中缺少cygwin1.dll   电脑。请尝试重新安装该程序以解决此问题。“

那么,我怎么能这样做,所以Windows批处理可以执行cygwin编译的文件?

3 个答案:

答案 0 :(得分:3)

你可以做一些事情:

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

答案 1 :(得分:3)

  

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

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

如果你对这种依赖关系不是太疯狂,你可以尝试用MinGW构建你的hello世界,而不是没有这种依赖。

答案 2 :(得分:2)

将cygwin1.dll复制到包含test.exe

的目录中

请参阅The program can't start because cygwin1.dll is missing... in Eclipse CDT