Linux 动态库相关知识整理
动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序,动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执行程序等诸多好处。作者是一个Linux后台开发,这些知识经常用到,所以整理了一下这方面的知识。静态库相对简单,本文只关心Linux平台下的动态库。 创建动态库 这里我把一个短小却很有用的哈希函数编译成动态库做为示例,ELFhash用于对字符串做哈希,返回一个无符号整数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //elfhash.h #include unsigned long ELFhash( const char * key); //elfhash.c #include "elfhash.h" unsigned long ELFhash( const char * key) { unsigned long h = 0, g; while ( *key ) { h = ( h > 24; h &= ~g; } return h; } 接下来使用gcc编译以上代码,并用ld将编译的目标文件链接成动态库 1 2 gcc -fPIC -c -Wall elfhash.c ld -shared elfhash.o -o libelfhash.so 其中 -fPIC 意思是生成位置无关的代码(Position