下连接器链接如何排序

下连接器链接如何排序,第1张

Linux下连接器ld链接如何排序

Linux系统软件中射频连接器ld的连接顺序非常重要。如果顺序不好,未定义的参考号将是错误的。这里我就给大家详细介绍一下Linux下射频连接器ld的连接顺序如何排序。期待帮助你和有兴趣的盆友一起掌握。

本来ld对连接一系列库的顺序是很敏感的,否则会报错未定义引用函数的符号,也就是找不到函数定义。其实图书馆是可以适当开放的。如果库libA.a依赖于库libB.a,那么射频连接器的主要参数应该是ln-lA-lB,肯定是这么写的。否则就是不正确的。

这似乎是历史时间的遗留问题。总之,如果你确定某个库不重要,那就放在最后。换句话说,库的加载顺序是按顺序进行的,从左到右,优先级最高。这也是古代的装备太破的原因。精华和电脑硬盘内含的CPU都是极其稀有珍贵的。所以,要想早点赢到什么,就一定要用什么都没有。一旦你不得不,装上它。不用的话就不用装了。那样的话,上面就不正确了。编译器将其加载到socketcomm后,发现也有依赖库,然后回查。没有这回事,所以不正确。

换句话说,尽可能把依赖的东西放在后面,让大家分享。

这是一个扩展。另外,还有一个难题。如果有几个库,同名或者类名的建筑结构名称会怎么样?

能够使用nm和readelf,ldd等指令查询你的库的依赖和符号表及其派生的函数符号等。这样,您就可以验证由上述序列导致的不同编译结果。

将测试库分为动态和动态;安静,安静;声音有三种。

第一种情况:静默数据库都包含相同的名称编号。

复制以下代码:

gcc-L./main.c-lA-lB

编译错误,在“XXX”的多个定义中。反复定义汉数。

第二种情况:体育图书馆

这取决于装货的顺序。如上所述,从左港出发,按需装车。

复制以下代码:

海湾合作委员会./libB.so./libA.so

复制以下代码:

海湾合作委员会./libA.so./libB.so

那个连接方式是隐式连接,也就是说加载时连接,而前面的静态数据库是编译时连接。

换句话说,编译的顺序很清楚哪个库文件同名。

第三种情况:移动,但是动态加载,而不是静态数据加载。

复制以下代码:

gccmain.c-ldl./libA.so./libB.so

复制以下代码:

gccmain.c-ldl./libB.so./libA.so

当没有连接选项时,与第二种情况相同。加了l选项后,哪个装哪个上。

LibB是静态数据连接!,巴丽是动态加载的。

复制以下代码:

gcc-l/main.c-LDL–lB

动态库名称显示了将信息加载到编译选项中。

复制以下代码:

gcc-l/main.c-LDL-lB./libA.so

复制以下代码:

gcc-L./main.c-ldl./libA.so-lB

当有静态数据和动态时,如果编译选项中没有添加动态库名显示信息,输出一切正常,如果静态数据库占主导,链接顺序无关。

以上是我总结的Linux系统软件下射频连接器ld的连接顺序的详细介绍。不同的顺序会导致不同的编译结果,所以依赖的尽量放在后面。你记得他们吗?

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/771063.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-02
下一篇 2022-05-02

发表评论

登录后才能评论

评论列表(0条)

保存