我有以下程序,我正在使用 MinGW 编译该程序:
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "aoeu" << endl;
string str;
return 0;
}
当我在 Windows 命令提示符下编译并运行该程序时,我得到了预期的以下输出:
C:\p\conscell>conscell.exe
aoeu
但是,当我在 Cygwin 中运行它时,我得到以下输出(或缺少输出):
$ ./conscell.exe
$ echo $?
127
如您所见,退出代码为127,表示找不到文件或库依赖项。此外,当我在 emacs 中的 M-x shell
中运行程序时(运行 C:/Program Files/Emacs/libexec/emacs/25.3/x86_64-w64-mingw32/cmdproxy.exe
)没有输出。
当我删除string str;
行时,将程序更改为:
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "aoeu" << endl;
return 0;
}
然后 Cygwin 和 Emacs 可以找到该文件,如 Cygwin 输出所示:
$ ./conscell.exe
aoeu
这似乎表明在程序中使用 std::string
会导致它依赖于 cmd 可以找到但 Cygwin 和 cmdproxy.exe 不能找到的某些文件。任何有关弄清楚这些文件是什么的帮助将不胜感激。
最佳答案
您应该使用 dependency walker 或类似实用程序检查可执行文件,以找出它依赖于哪些库。然后将它们放入与可执行文件相同的文件夹中,以便无论当前环境如何都可以找到它们。请参阅Dynamic-Link Library Search Order 。或者,您可以静态链接它们。
关于c++ - 程序在cmd中运行,在cygwin中立即退出,状态为127,在emacs shell中没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46883401/