c – 运行时的gcc重定位错误

前端之家收集整理的这篇文章主要介绍了c – 运行时的gcc重定位错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
目前我正在运行一些多线程代码,所有代码都编译没有错误或警告,并且在执行代码时出现此错误

relocation error: /lib/x86_64-linux-gnu/libgcc_s.so.1:
1thread_mutex_locXãƨ+�����Ȩ+ ������ƨ+�&쏭Ũ�Ȩ+e

什么是重定位错误

解决方法

重定位是在代码中采用一些偏移到实际内存布局的过程.
重定位(将由重定位过程编辑的位置和每个重定位的描述)由编译器生成,例如,对于TLS变量,对于动态库调用,对于PIC / PIE代码.重定位描述存储在二进制文件中(例如,在 Linux中的ELF格式).

通过linux中的ld链接器程序,在链接步骤中部分完成重定位;其他操作系统中的其他链接器.

但是有些重定位无法在离线状态下完成(在启动程序之前).使用ASLR(地址空间布局随机化)来加载动态库需要这样的重定位.因此,其中一些是在程序解释器(Linux中的ld.so)启动程序之前完成的,也称为运行时链接程序.它会将您的程序及其动态库加载到内存中并进行重定位.

重定位完成的第三个地方:是对dlopen()的调用(在unix中的libdl.so中).它是动态加载动态库的库;并且因为动态库具有重定位,所以此库也应该执行重定位.

错误消息来自某个链接器,如果您在启动程序后看到此消息,则这是第二个(ld.so)或第三个案例(libdl).

我无法找到生成此消息的确切位置,但可能会到期

>内存或磁盘数据损坏(非ecc内存或其他硬件错误),这使得一些数据错误.重启; filesystem和md5sums检查;重新安装使用的软件包(glibc; libgcc);重新编译你的申请;重新插入记忆,减少记忆频率.>使用了一些未定义的符号.尝试将环境变量LD_BIND_NOW(如果您使用glibc或衍生物)设置为非null.>程序破坏了它的记忆本身.例如使用Stack Overflow或Random Pointer Walk等.尝试使用valgrind(如果你在英特尔).>同步错误,允许您编程打破自己的内存.使用valgrind –tool = helgrind(如果你是英特尔并且有很多时间等待)

猜你在找的C&C++相关文章