这是来自操作系统开发网站的二手问题,但它让我很好奇,因为我无法在任何地方找到合适的解释.
使用gcc编译和链接独立的C++程序时,有时会出现这样的链接器错误:
out/kernel.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
Run Code Online (Sandbox Code Playgroud)
这显然是因为这个符号是在libstdc ++中定义的,它在独立环境中是缺失的.解决问题只需要在某处定义此符号:
void *__gxx_personality_v0;
Run Code Online (Sandbox Code Playgroud)
这很好,但我不喜欢那些神奇地工作的东西......所以问题是,这个符号的目的是什么?
更新:
结果证明这是一个编译器问题(我使用的是MinGW),因此解决方法是切换到另一个编译器(在本例中为Cygwin)。
(原始)问题
我是一名开始自学C++的学生,在尝试使用C++时遇到了问题string
这是我的测试代码(不起作用的代码)
#include <iostream>
#include <string>
using namespace std;
int main()
{
string myString;
cin >> myString;
cout << myString;
return(0);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,程序刚刚结束并退出,然后我才能输入任何内容,这就是我尝试运行时的结果gdb
(gdb) run
Starting program: C:\Users\DANIEL~1\AppData\Local\Temp\sandbox.exe
[New Thread 15036.0x31bc]
[New Thread 15036.0x2db4]
[New Thread 15036.0x2628]
[New Thread 15036.0x2280]
During startup program exited with code 0xc0000139.
(gdb)
Run Code Online (Sandbox Code Playgroud)
当我尝试制作文件并从 cmd 运行它时
g++ sandbox_string.cpp -o sandbox_string
(我加了_string和_int makefile分开,程序还是一样)
我收到此错误: 未找到入口点
经过一番谷歌之旅后,我相信这个问题与缺少 DLL相关。我怎么知道我缺少什么 …
昨天我决定下载,安装并尝试使用Allegro 5.我还下载了Code :: Blocks 12.11 w/MinGW编译器.我设置了所有内容并正确安装了所有内容(或者我认为)并尝试运行示例代码以查看它是否可行:
#include <stdio.h>
#include <allegro5/allegro.h>
int main(int argc, char **argv){
ALLEGRO_DISPLAY *display = NULL;
if(!al_init()) {
fprintf(stderr, "failed to initialize allegro!\n");
return -1;
}
display = al_create_display(640, 480);
if(!display) {
fprintf(stderr, "failed to create display!\n");
return -1;
}
al_clear_to_color(al_map_rgb(0,0,0));
al_flip_display();
al_rest(10.0);
al_destroy_display(display);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译并运行程序时,会出现一个错误消息框,指出"程序入口点_gxx_personality_v0无法位于动态链接库libstdc ++ - 6.dll中." 我在网上搜索了大约一个小时试图找到解决这个问题的方法,就像我对大多数事情一样,但我空手而归.我想知道是否有人对此问题的任何修复有任何想法,如果是这样,请尽快告诉我!提前致谢!
当我用GCC编译时:
#include <iostream>
#include <string>
int main()
{
std::cout << std::string("\r\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
通过使用以下批次:
g++ -Wall main.cc
Run Code Online (Sandbox Code Playgroud)
并尝试执行output(a.exe),然后Windows崩溃初始化时出现此错误:
如果我避免std::string在C++代码中使用它会正常执行,甚至包括<string>.有任何想法吗?
注意,第一次测试std::string.
我运行Windows 8/64位.我的编译器包含这个文件build-info.txt:
# **************************************************************************
version : MinGW-W64-builds-4.3.0
user : nixman
date : 03.30.2017- 1:01:08 PM
args : --mode=gcc-6.3.0 --buildroot=/c/mingw630 --jobs=2 --rev=2 --threads=win32 --exceptions=sjlj --arch=i686 --bin-compress
[much more here...]
# **************************************************************************
Run Code Online (Sandbox Code Playgroud)
另请注意,我习惯于禁用和卸载所有可能的防病毒实用程序(例如,Windows Defender).