在msys64中编译的具有system或popen的C程序在Win10 cmd shell中无法正常工作

问题描述

我使用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 (将#修改为@)