1

我有这样的代码

#include <iostream>
#include <string>

using namespace std;

void Test(){
    string line;
}

int main(){
    cout << "test " << endl;
    return 0;
}

该代码是可编译的,但是当我尝试运行它时,程序停止工作。然后使用 gdb 发现我的程序有什么问题

 (gdb) run
 Starting program: E:\CPP\Program dinamis\a.exe
 [New Thread 4892.0x1d4c]
 test
 Program received signal SIGILL, Illegal instruction.
 0x6fcc43c3 in libstdc++-6!_ZSt4cout () from C:\MinGw\bin\libstdc++-6.dll

我不明白它有什么问题。我通过键入以下内容使用 MinGW (G++) 作为我的编译器g++ -v

 E:\CPP\Program dinamis>g++ -v
 Using built-in specs.
 COLLECT_GCC=g++
 COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.6.2/lto-wrapper.exe
 Target: mingw32
 Configured with: ../gcc-4.6.2/configure --enable-
 languages=c,c++,ada,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 
 --enable-shared --enable-libgo
 mp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-  
 runtime-libs --build=mingw32 --prefix=/mingw
 Thread model: win32
 gcc version 4.6.2 (GCC)

但如果我在我的 Visual Studio 上编写相同的代码,程序运行良好且不会出错。我应该如何处理我的 G++

4

3 回答 3

0

好吧,最后我找到了解决方案。我在 Windows 8 操作系统上运行,似乎主要问题在于编译源代码时的链接过程。

所以假设文件名是mycode.cpp,我只是运行带有其他-static-libgcc -static-libstdc++选项的命令,例如:

 g++ "mycode.cpp" -o mycode -static-libgcc -static-libstdc++
于 2015-01-12T07:10:04.813 回答
0

您实际上并没有使用测试功能进行输出,您可以按如下方式使用它,但不确定为什么会出现任何错误,因为对我来说它在 GNU GCC 版本 4.8.1 下运行良好

这是使用 Test() 的代码示例

#include <iostream>
#include <string>

using namespace std;

string Test(){
    string line = "My text Line here!";
    return line;
}

string Test2(){
    return "My text Line2 here!";
}

int main(){
    cout << Test() << endl;
    cout << Test2() << endl;
    return 0;
}

第二个测试是为了说明返回字符串的更简单用法,注意该函数也需要定义为返回字符串。

于 2013-11-07T09:07:16.590 回答
-1

只是瞎拍,尝试处理main函数参数:

int main(int, char**)
{
//...

也许它与堆栈有关......?

于 2013-11-07T09:30:13.307 回答