c++ - 程序在cmd中运行,在cygwin中立即退出,状态为127,在emacs shell中没有输出

标签 c++ windows cygwin mingw command-prompt

我有以下程序,我正在使用 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/

相关文章:

c++ - 如何从 Armadillo 矩阵中替换 NaN?

c++ - 在 C++ 中实现另一个用户堆栈

c++ - 返回 std::string 作为 const 引用

windows - 对于我的 Azure 应用程序二进制文件被盗,我应该有多疑虑?

c - cygwin 中的 gcc 编译器无法正确执行(放弃?)

c# - 安装后cygwin gdb仍然无法工作

Java 的 System.exit(0); vs C++ 返回 0;

python - 如何在 Windows 中使用 Python BaseHttpRequestHandler 将图像传输到客户端?

以辅助功能模式运行的 Windows 操作系统?

bash - (ConEmu + Cygwin) 如何从 cygwin bash 脚本中更改 ConEmu 的选项卡名称