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

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

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

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

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

“程序无法启动,因为您的计算机缺lesscygwin1.dll。尝试重新安装程序来修复此问题。”

那么,我怎样才能使Windows批处理可以执行cygwin编译的文件呢?

你可以做一些事情:

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

“程序无法启动,因为您的计算机缺少cygwin1.dll。尝试重新安装程序来修复此问题。”

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

如果你对这个依赖关系不是太疯狂的话,你可以试着用MinGW来建立你的hello世界,而不是依赖关系。

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

请参阅该程序无法启动,因为cygwin1.dll丢失…在Eclipse CDT