程序在cmd中工作,在cygwin中立即以状态127退出,在emacs shell中没有输出
Program works in cmd, immediately exits with status 127 in cygwin, no output in emacs shell
我有以下程序,我正在使用MinGW编译:
#include <iostream>
#include <string>
using namespace std;
int main() {
cout << "aoeu" << endl;
string str;
return 0;
}
当我在Windows命令提示符下编译并运行此程序时,我按预期得到以下输出:
C:pconscell>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不能。 任何关于弄清楚这些文件的帮助将不胜感激。
您应该使用依赖 walker 或类似的实用程序检查可执行文件,以确定它依赖于哪些库。然后将它们放入与可执行文件相同的文件夹中,以便无论当前环境如何都可以找到它们。请参阅动态链接库搜索顺序。或者,您可以静态链接它们。
MinGW使用GCC编译,但适用于Windows环境,因此它有时使用Windows库并为Windows架构编译。Cygwin是一个轻量级的Unix环境。
如果我没记错的话,cygwin包括MinGW或GCC。如果你想在Windows上运行你的程序,使用独立的minGW编译如果你想让它在Unix上运行,可以在Unix操作系统上工作。如果你两者都想要,我想你将不得不编译两次。使用同时使用两个编译器进行编译的生成文件。
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 创建LinkedList退出,返回代码为-11(SIGSEGV)
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何让LLDB在成功时退出,在失败时等待
- C++控制台应用程序阻止退出
- 程序在执行程序的其余部分之前退出
- 构造函数在退出函数时无法初始化一个参数
- 为什么异常不退出程序?
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 退出简单while循环时出现问题
- 使用vscode调试时,GDB意外退出
- pclose() 不会给我进程退出代码
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++从另一个函数退出函数
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++逗号分隔的输入数组代码过早退出
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 为什么 C++ 中的以下结构声明会导致退出 127?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 程序在cmd中工作,在cygwin中立即以状态127退出,在emacs shell中没有输出