位置: 编程技术 - 正文

Linux系统下 连接器ld链接顺序的总结(linux 命令连接)

编辑:rootadmin

推荐整理分享Linux系统下 连接器ld链接顺序的总结(linux 命令连接),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux连接linux,连接linux命令,linux链接ln,连接linux命令,linux连接工具有哪些,linux连接工具有哪些,linux连接linux,连接linux命令,内容如对您有帮助,希望把文章链接给更多的朋友!

  原来ld对于链接一系列的库的顺序是很敏感的,不然会报undefined referenced 的函数符号错误,意思就是未找到函数定义。实际上库是能正确打开的。如果库libA.a依赖于库libB.a,那么连接器的参数应该ln -lA -lB, 必须这样写。不然就会错误。

  这个看来是历史的遗留问题。说白了就是,如果你确定某个库不重要,就放到最后,也就是说,库的加载顺序是按顺序进行的,从左到右,优先级最高,这也是远古时代机器太破的原因,内在和硬盘包括CPU都是极其稀罕珍贵的。所以要你提前搞定哪些需要哪些不需要,一旦需要,就加载上去,不需要就不要加载上去。这样就可以解释上面的错误了,编译器加载到socketcomm后,发现还有依赖库,再往后找,木有咧,于是就错了。

  也就是说,被依赖的尽量放到后面,让大家可以共用。

  这就引申同来了另外一个问题,如果有多个库,使用了相同的函数名或者类名,结构体名称会怎么样?

  可以使用nm和readelf、ldd等命令来查看你的库的依赖和符号表以及导出的函数符号等。这样就可以来验证上面的因为顺序造成的不同的编译结果。

  把测试的库分成动、动;静、静;动静三种情况。

  第一种情况:静静库都包含有相同的名字函数

复制代码代码如下:  gcc -L./ main.c -lA -lB

  编译报错,在multiple definition of `XXX‘。重复定义函数。

  第二种情况:动动库

  这个得看加载的顺序,上面说过,从左开始,按需加载。

复制代码代码如下:  gcc main.c ./libB.so ./libA.so

Linux系统下 连接器ld链接顺序的总结(linux 命令连接)

复制代码代码如下:  gcc main.c ./libA.so ./libB.so

  这样的链接方式为隐式链接,或者说加载时链接,而前面的静态库为编译时连接。

  也就是说,编译的顺序确定到底调用哪个库中的同名函数。

  第三种情况:动动,但是是动态加载,而不上面的静态加载。

复制代码代码如下:  gcc main.c -ldl ./libA.so ./libB.so

复制代码代码如下:  gcc main.c -ldl ./libB.so ./libA.so

  没有加链接选项时,跟第二种情况一样。加了L选项后,指定哪上加载哪个。

  libB为静态链接!, libA为动态加载.

复制代码代码如下:  gcc -L./ main.c -ldl –lB

  动态库的库名显示的加载入编译选项中

复制代码代码如下:  gcc -L./ main.c -ldl -lB ./libA.so

复制代码代码如下:  gcc -L./ main.c -ldl ./libA.so -lB

  在有静态和动态时,不把动态库库名显示加入编译选项,输出是正常的,如果加进去以静态库为主和link顺序无关。谢谢阅读,希望能帮到大家,请继续关注积木网,我们会努力分享更多优秀的文章。

Linux系统下怎么用CheckInstall从源码创建一个RPM或DEB包 问题:我想要从源码创建安装的软件包。有没有一种方式从源码来创建和安装软件包,而不是运行makeinstall?这样的话,以后如果我想,我可以容易的卸

Linux系统配置 Linux访问控制列表(ACL)的权限控制方法 使用拥有权限控制的Liunx,工作是一件轻松的任务。它可以定义任何user,group和other的权限。无论是在桌面电脑或者不会有很多用户的虚拟Linux实例,或者

在linux系统下利用PC机实现路由转发的具体步骤 1、网络拓扑网络拓扑如下所示,我们在这里用到了三台机子做实验,分别是①、④、⑦号机,使用①号机ping⑦号机,④号机作为路由转发。2、错误的

标签: linux 命令连接

本文链接地址:https://www.jiuchutong.com/biancheng/366964.html 转载请保留说明!

上一篇:Linux系统命令中exit与exit的区别(linux命令eof)

下一篇:Linux系统下怎么用CheckInstall从源码创建一个RPM或DEB包(linux小技巧)

  • 利润10万企业所得税多少
  • 非营利组织支付给他人劳务费
  • 一般纳税人留底税额抵减欠缴税额
  • 网上车辆购置税缴纳
  • 小规模纳税人免税会计分录
  • 并购对利润的影响
  • 代驾服务费属于什么费用
  • 三证合一后新办企业多久去税务登记
  • 批发零售企业用什么软件好
  • 代销方式的特点
  • 预收房款不征税发票
  • 核定征收取消了
  • 小规模纳税人废品站卖废品发票开什么项目
  • 购买股票的分录怎么写
  • 劳务报酬所得的收入额
  • 公司集体活动的目的与意义
  • 限售股转让个人所得税
  • 电费返还怎么查询
  • 免税农产品进项抵扣计算
  • mac系统如何连接北通手柄
  • windows10如何开热点
  • 企业能公户往个人转账吗
  • win10错误代码0xc0000001
  • 车辆年审收费么
  • 资产盘盈盘亏处理
  • npp怎么安装
  • php开发实战权威指南
  • php登录注册
  • php 无限级分类
  • 个人所得税申报流程图
  • GANs系列:CGAN(条件GAN)原理简介以及项目代码实现
  • 哪些人不要申报个税
  • mysql数据库外键约束怎么写
  • 公司人员工资计算方法
  • 增值税普票能抵税吗
  • 个税年度汇算清缴总结
  • 销售自用的生产设备一台
  • 折旧率多少正常
  • 合伙制律师事务所和个人律师事务所
  • 租赁公司租赁物计入什么会计科目
  • 劳动合同没有齐缝章
  • 机动车临时号牌怎么贴
  • 定期存款账务怎么处理
  • 期末余额和期初余额
  • 定额征收个体户如何交所得税
  • 成本发票怎么入账
  • 企业工资薪金支出怎么确认
  • 金税盘未清盘怎么处理
  • 因进出口商品引起的收支
  • 建账过程中应注意的事项
  • sql server数据库跟踪
  • mysql5.7卸载重装
  • xp window
  • 解决windows update问题
  • windows10显示
  • centos更新命令
  • wp8.0升级8.1
  • hyper-v是啥
  • 怎么找回手机删除的照片和视频
  • Linux系统用命令进行盘数据往外读不可
  • qctray.exe - qctray进程 是什么文件 作用是什么
  • xp系统插u盘没反应怎么解决
  • 无法打开opencv2
  • windows7系统下给WORD2010设置打开密码的方法
  • win8.1系统怎么升级到win10
  • unityrpg
  • Expand、Fasthelp、Fc命令的用法
  • 数独算法代码c语言
  • unity开发手游
  • python怎么做脚本
  • js函数关键字
  • python类中的函数必须加self吗
  • 福建省地税局副局长 阮
  • 辽宁税务遴选
  • 夫妻双方房子契税怎么算
  • 火车票抵扣申报表怎么填
  • 下载重庆税务官方app
  • 手机陌陌卸载还有记录吗
  • 职工疗养费可以税前扣除吗
  • 苏州市区公司可以在园区买社保吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设