热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C/C++开发中GCC共享库与glibc链接问题的深度解析与解决方案

我正在Linux64bit下使用EclipseCDT编写一个简单的C共享库。代码对的rand()函数有一个引用它编译得很好但是在链接时报告来自链接器的以下错误:gcc-shared

我正在Linux 64bit下使用Eclipse CDT编写一个简单的C共享库。

代码对rand()函数有一个引用它编译得很好但是在链接时报告来自链接器的以下错误:

 gcc -shared -o "libalg.so" ./sort.o /usr/bin/ld: ./sort.o: relocation R_X86_64_PC32 against undefined symbol `rand@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: final link failed: Bad value 

sort.o是从文件编译的目标文件。 libalg.so是目标共享库名称。

谁能解释为什么会这样?

谢谢。

    x86_64架构上, gcc要求您默认使用-fPIC即位置-fPIC代码。

    该错误的根本原因是符号rand的重定位类型是R_X86_64_PC32类型,这意味着它是PC相对的,并且应该位于与下一条指令相差32bit

    但目前的架构是x86_64类型,这意味着它可以位于64bit地址空间内的任何位置。

    因此,动态链接器实际上无法将符号链接到这样的重定位类型。

    您必须使用-fPIC或使用-mcmodel=large编译代码,这实际上会使重定位类型为R_X86_64_64

    有关链接如何完成的更多详细信息,请参阅Eli Bendersky撰写的这篇精彩博客

    需要了解更多c/c++开发分享gcc共享库无法链接到glibc,也可以关注C/ C++技术分享栏目—编程笔记

      以上就是c/c++开发分享gcc共享库无法链接到glibc相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(编程笔记)。


      推荐阅读
      • 在DELL Inspiron 14R上部署CentOS X64 6.4的详细步骤
        本文详细记录了在DELL Inspiron 14R笔记本电脑上安装CentOS X64 6.4操作系统的过程,包括遇到的问题及解决方法。 ... [详细]
      • CentOS7源码编译安装MySQL5.6
        2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
      • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
      • 在CentOS上构建Ntopng实时网络流量监控平台
        本文详细介绍了如何在CentOS操作系统上安装和配置Ntopng,一个强大的网络流量监控工具。Ntopng能够提供实时的网络流量分析,并通过Web界面展示详细的流量报告。 ... [详细]
      • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
      • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
      • 嵌入式开发环境搭建与文件传输指南
        本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
      • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
      • 俗话说得好,“工欲善其事,必先利其器”。这句话不仅强调了工具的重要性,也提醒我们在任何项目开始前,准备合适的工具至关重要。本文将介绍几款C语言编程中常用的工具,帮助初学者更好地选择适合自己学习和工作的编程环境。 ... [详细]
      • 本文详细解析了muduo库中的Socket封装及字节序转换功能。主要涉及`Endian.h`和`SocketsOps.h`两个头文件,以及`Socket.h`和`InetAddress.h`类的实现。 ... [详细]
      • 参考文章https:blog.csdn.netweixin_33834137articledetails938837781.uname-a2.lsb_release-a3.ca ... [详细]
      • 本文详细介绍了在首次安装 Qt 后,创建新项目时遇到‘No valid kits found’错误的解决方案。通过调整 Qt Creator 中的配置,确保正确识别已安装的 Qt 版本。 ... [详细]
      • 本文深入探讨了在安装PostgreSQL数据库系统时,执行Configure、Make及Make Install命令的具体含义与作用。 ... [详细]
      • 本文详细介绍了Java编程语言中的关键字及其用途,包括53个关键字和2个保留字。文章不仅解释了每个关键字的基本功能,还提供了实际应用场景中的使用示例。 ... [详细]
      • 本文详细介绍了在Mac操作系统中使用Python连接MySQL数据库的方法,包括常见的错误处理及解决方案。 ... [详细]
      author-avatar
      手机用户2502880331
      这个家伙很懒,什么也没留下!
      PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
      Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有