如何在Linux下对Linux连接器链路进行Linux教程的排序

如何在Linux下对Linux连接器链路进行Linux教程的排序
在linux系统中,连接器LD链路的顺序非常重要。如果序列不正确,则未定义的引用函数将被报告错误。接下来,小编将告诉你如何安排连接器LD的链接顺序linux下。
原来,LD是连接一系列的图书馆秩序非常敏感,否则会报告未引用的函数的错误,即没有函数定义被发现。事实上,图书馆可以正确打开。如果库坝,取决于图书馆libb,然后连接器参数是在香格里拉-磅,必须写的。否则,这将是错误的。
这似乎是一个历史遗留下来的。那就是,如果你指定的图书馆是不重要的,在最后,也就是说,图书馆的加载顺序是顺序,从左到右,优先级最高的,这就是为什么古代的机器太破了,和内部硬盘包括CPU极为罕见和珍贵的。所以需要提前做不需要,只要你需要,负荷,不不需要加载,这可以解释上述错误。当编译器加载到socketcomm,发现它是依赖于图书馆,然后去寻找它,并且木头笑,所以它是错误的。
也就是说,尽可能多地放在后面,这样每个人都可以分享它。
这也扩展了同样的问题。如果有多个库,则使用相同的函数名或类名,结构的名称是什么
你可以使用命令如nm和readelf,LDD查看图书馆的依赖和符号表,以及出口等功能的符号,这可以用来验证上述序列不同的编译结果由于订单。
测试库分为动态和动态、静态和静态三种静态和动态条件
第一例:移动图书馆
这要看加载顺序,也就是说从左边开始加载,按需加载。
复制代码代码如下所示:
GCC主要C. / / liba.so libb。所以。
复制代码代码如下所示:
GCC主要C. / / libb.so力霸。所以。
这样的链接是一个隐式链接,或者是在加载负载时的链接,而以前的静态库是在编译时连接的。
也就是说,编译顺序决定了调用库中同名的函数。
第二种情况:安静库包含同名函数。
复制代码代码如下所示:
GCC
编译错误,在` xxxlsquo多重定义;定义函数。
第三种情况:移动,但动态加载,而不是上面的静态加载。
复制代码代码如下所示:
GCC主要。C LDL。 / / libb.so力霸。所以。
复制代码代码如下所示:
GCC主要。C LDL。 / / liba.so libb。所以。
当没有添加链接选项时,它与第二个选项相同。添加L选项后,指定加载哪个选项。
libb是静态链接!力霸是动态加载。
复制代码代码如下所示:
GCC
动态显示库加载到编译器选项中
复制代码代码如下所示:
GCC L. /主。C LDL -磅/ liba.so
复制代码代码如下所示:
GCC L. /主。C LDL。 / liba.so磅
在静态和动态的,动态库库名显示编译器选项的增加,输出是正常的,如果添加到静态库与顺序无关的链接。
以上是linux系统中LD链路序列的介绍。不同的顺序会导致不同的编译结果,因此我们应该尽可能地依赖它。你还记得吗
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部