问题描述
我使用popen()调用在GNU / Linux机器上用C语言编写了一个GTK程序。现在,我需要将其移植到Windows10。
我可以编译它,并且它是从mingw64终端启动时运行的。
但是,如果我从常规Win10 cmd shell启动它,则只有在可执行文件位于安装目录中时,它才起作用。
我已经确定问题出在popen()调用(和system()),但是我找不到解决方法。
systest.c:
#include <stdlib.h>
int main( void )
{
FILE *fp;
system( "pwd" );
}
我将msys-2.0.dl复制到systest.exe所在的目录中。从cmd shell启动后,它将打印工作目录。但是,如果我将两个文件放在另一个目录中,则system()只会失败,并且什么也不做。
我真的很困惑,希望能带给我进一步的提示。
谢谢你, Flo
更新
谢谢您的评论,我正在更新systest.c并简化要执行的命令:
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
FILE *fp;
printf("+++ system NULL: %d\n",system( NULL ));
printf("+++ system echo: %d\n",system( "echo hello" ));
}
如果我在mingw64主目录的cmd shell中执行它,则输出为
+++ system NULL: 1
hello
+++ system echo: 0
如果我将bin创建为子目录,然后将systest.exe和msys-2.0.dll复制到其中并在其中执行systest(同样在cmd shell中),则会得到以下输出:
+++ system NULL: 1
+++ system echo: 127
那是为什么?我不清楚它背后的机制。
顺便说一句:编译是在mingw64 shell中进行的:gcc -o systest systest.c
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)