首次编辑:24/8/17/16:55
最后编辑:24/8/17/17:18
动态库应该被编译为位置无关的代码,在这种情况下,glocal offset table这张表记录着所有动态链接符号的位置。
-fpic
和-fPIC
选项都可以生成位置无关的代码。前者编译出更快的代码,但对于global offset table的尺寸有限制,后者则没有。
.so
文件的真实名字,通常遵循libname.so.x.y.z
的结构,name
即为动态库的名字,x
、y
、z
分别代表大、小版本号和发布号。libname.so.x
,即只带有大版本号的名字,通常是个指向real name文件的符号链接。libname.so
,即不带任何版本号的名字,通常是个指向soname文件的符号链接。gcc -fpic -c source1.c source2.c
gcc -fpic source1.o source2.o -shared -Wl,-soname,libsource.so.1 -o libsource.so.1.1
-Wl
作用是将后面的选项传递给链接器ld。-soname
表示在目标库中嵌入soname信息,这样当有可知性文件需要调用库source的时候,就会通过这个soname信息来寻找拥有相同soname的动态库。
作者:码鸽
链接:https://code-pigeon.github.io/blog/html/【gcc笔记】动态库.html
版权声明:博客所有原创内容(包括但不限于文章、图像等)除特别声明外,均采用CC BY-NC-SA 4.0国际许可协议。任何人均可自由传播,但禁止用于商业用途且必须署名并以相同方式分享。