所以我一直在使用MinGW GCC 4.4版或者一段时间,并决定升级时间.我去了MinGW网站并下载了最新版本的GCC(4.7.0).
删除我以前的版本并安装最新版本后,即使是最简单的程序也会崩溃.例如,如果我编译这个程序
#include <iostream>
using namespace std;
int main () {
cout << "Hello, World" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用命令行
g++ hello.cpp -o hello.exe
Run Code Online (Sandbox Code Playgroud)
它将打印出"Hello,World"然后崩溃.但是,如果我使用以下命令行编译它:
g++ -O3 hello.cpp -o hello.exe
Run Code Online (Sandbox Code Playgroud)
它会完美运行,而不会崩溃.
现在,如果我更改输入程序,并使其稍微复杂一点:
#include <iostream>
#include <string>
using namespace std;
int main () {
string str;
cout << "Enter a string: ";
getline (cin, str);
if (str == "foo")
cout << "You entered foo!" << endl;
else
cout << "You entered: " << str;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果没有优化选项(-O3),它将在打印出"输入字符串:"之前崩溃,但是,使用代码优化行,它会在输入字符串后崩溃. …
我一直在遵循《OpenSSL用户指南》中的说明,该指南链接到3noch的编译OpenSSL 的指南。以下是我使用的工具/版本:
按照说明,我能够执行以下命令而不会出现问题:
perl Configure VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32
ms\do_ms
Run Code Online (Sandbox Code Playgroud)
然后,当我继续执行
nmake -f ms\nt.mak
Run Code Online (Sandbox Code Playgroud)
我收到以下
Assembling: tmp32\sha1-586.asm
tmp32\sha1-586.asm(1432) : error A2070:invalid instruction operands
tmp32\sha1-586.asm(1576) : error A2070:invalid instruction operands
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0
\VC\BIN\ml.EXE"' : return code '0x1'
Stop.
Run Code Online (Sandbox Code Playgroud)
在调查了这个问题之后,我发现HostageBrain的博客文章提到了确切的错误,指出要使用nasm进行编译。因此,我切换到以下命令序列:
perl Configure VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32
ms\do_nasm
nmake -f ms\nt.mak
Run Code Online (Sandbox Code Playgroud)
但是,一旦切换到NASM版本,就会收到以下错误:
tmp32\sha1-586.asm:1: error: parser: instruction expected …Run Code Online (Sandbox Code Playgroud)