![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
gcc
_kerneler
这个作者很懒,什么都没留下…
展开
-
动/静态库:适配平台,位数,依赖
平台 和 位数:动态:linux@linux$ file libnl-3.so.200.26.0linux@linux$ libnl-3.so.200.26.0: ELF 32-bit LSB shared object, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, not stripped静态:readelf -h libnl-3.a依 赖ldd name.soreadelf -a name.so | grep NEED原创 2020-07-02 16:12:31 · 161 阅读 · 0 评论 -
gcc | 库连接的顺序问题
GCC在链接过程中,对参数中的库的顺序是有要求的,参数右侧的库会先于左侧的库加载,也就是说参数的解析是从右往左的。 假设库B依赖与库A,则链接的时候要写为: gcc -o bin -lB -lA 如果写为: gcc -o bin -lA -lB 则在B中引用的A中的内容就会无法链接通过。如果你的库在链接时安排的顺序是:foo.o -lz bar.o。那么gcc的链接器先搜索库foo,然后是z库,然后是bar库。这样就带来一个问题,如果库bar调用了库z里面的函数,但是链接器是先搜原创 2020-06-30 21:18:57 · 646 阅读 · 0 评论 -
静/动态库
1. 库的介绍库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。 windows上对应的是.lib .dll linux上对应的是.a .so2、静态库 静态库:在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。静态库原创 2020-06-30 20:55:31 · 194 阅读 · 0 评论 -
GCC的符号可见性 -fvisibility=hidden
问题主程序依赖了两个库libA的funcA函数和libB的funcB函数。示意的代码(main.cpp)如下:#include <cstdio>int funcA(int, int);int funcB(int, int);int main() { printf("%d,", funcA(2, 1)); printf("%d\n", funcB(2, 1)); return 0;}libA示意实现(libA.cpp)如下:int subfunc(in原创 2020-05-14 20:45:49 · 15640 阅读 · 5 评论 -
gcc 运行指定动态库的三种方法
** -rpath / -R**:动态库指定的方式:使用GCC编译动态链接库的项目时,在其他目录下执行很可以出现找不到动态链接库的问题。这种情况多发生在动态链接库是自己开发的情况下,原因就是程序运行时找不到去何处加载动态链接库。可能会说在编译时指定了链接的目录啊!编译时指定的 -L的目录,只是在程序链接成可执行文件时使用的。程序执行时动态链接库加载不到动态链接库。解决办法有两种,第一程序链接时指定链接库的位置,就是使用-wl,-rpath=<link_path>参数,<link_原创 2020-05-14 20:33:57 · 6952 阅读 · 1 评论 -
linux:GCC的参数
** -rpath / -R**:动态库指定的方式:使用GCC编译动态链接库的项目时,在其他目录下执行很可以出现找不到动态链接库的问题。这种情况多发生在动态链接库是自己开发的情况下,原因就是程序运行时找不到去何处加载动态链接库。可能会说在编译时指定了链接的目录啊!编译时指定的 -L的目录,只是在程序链接成可执行文件时使用的。程序执行时动态链接库加载不到动态链接库。解决办法有两种,第一程序链接时指定链接库的位置,就是使用-wl,-rpath=<link_path>参数,<link_原创 2020-05-14 20:30:31 · 635 阅读 · 0 评论