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的连接顺序的详细介绍。不同的顺序会导致不同的编译结果,所以依赖的尽量放在后面。你记得他们吗?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)