加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 对__gxx_personality_sj0`的未定义引用

发布时间:2020-12-16 09:14:00 所属栏目:百科 来源:网络整理
导读:使用 gcc 4.6尝试执行此代码时: #include iostreamusing namespace std;#include bitsetint main(){ //Int a; long long min = std::numeric_limitsint::min(); unsigned long long max = std::numeric_limitsint::max(); cout "min: " min 'n'; cout "max
使用 gcc 4.6尝试执行此代码时:

#include <iostream>

using namespace std;

#include <bitset>

int main()
{
   //Int<> a;
   long long min = std::numeric_limits<int>::min();
   unsigned long long max = std::numeric_limits<int>::max();
   cout << "min: " << min << 'n';
   cout << "max: " << max << 'n';
   cout << (min <= max);
   std::bitset<64> minimal(min);
   cout << "minimal: " << minimal;

   return 0;
}

我收到以下错误:
1.未定义的__gxx_personality_sj引用
2.未定义的_Unwind_SjLj_Register引用
3.未定义的_Unwind_SjLj_Unregister引用
4.未定义的_Unwind_SjLj_Resume引用

到底是怎么回事?!

解决方法

这些函数是GCC的C异常处理支持的一部分. GCC支持两种异常处理,一种是基于对setjmp和longjmp(sjlj异常处理)的调用,另一种是基于DWARF调试信息格式(DW2异常处理).

如果您尝试在单个可执行文件中混合使用不同异常处理实现编译的对象,则会发生这些类型的链接器错误.您似乎正在使用DW2 GCC,但您尝试使用的某些库是使用sjlj版本的GCC编译的,从而导致这些错误.

简短的回答是这些问题是由不同编译器之间的ABI不兼容引起的,因此当您混合使用不同编译器编译的库或使用相同编译器的不兼容版本时会发生这种情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读