【发布时间】:2014-01-25 18:42:49
【问题描述】:
我有一些 C++ 代码我想在服务器上运行并返回输出。我知道
exec("./myprogram.exe", $out);
应该运行程序,$out 将保存输出。目前我无法从我的程序中获得输出......它使用cout 输出它,我在 Windows 上编译它,我想要运行它的服务器是基于 Linux 的。有什么指点吗?
【问题讨论】:
我有一些 C++ 代码我想在服务器上运行并返回输出。我知道
exec("./myprogram.exe", $out);
应该运行程序,$out 将保存输出。目前我无法从我的程序中获得输出......它使用cout 输出它,我在 Windows 上编译它,我想要运行它的服务器是基于 Linux 的。有什么指点吗?
【问题讨论】:
首先,您需要在 Linux 上重新编译您的 C++ 代码,首先使用 g++ -Wall -g(g++ matters a lot 的参数顺序)-然后是其他一些编译器参数-因为 -Wall 要求提供所有警告,而 @987654331 @ 用于调试信息。在 Linux 上调试代码后,您还可以通过 -O2 要求 GCC 进行优化。
然后您需要使用 PHP 的 popen 函数来获取命令的输出(通过 pipe)。如文件所述,使用例如fgets 从管道句柄读取,不要忘记 pclose 它。另见this answer。
【讨论】:
g++ 的参数顺序。
g++ 的程序参数顺序)通常不是无关紧要的,特别是如果您的编译程序使用一些库。 OP没有告诉我们他的C++程序是什么,有多大……
g++ -lgmp foo.cc bar.cc -I/usr/local/include -L/usr/local/lib -o foobar 成功链接;而“顺序很重要”是指把-Wall -g first ....