动态与静态函数库
当前的Linux大多是将函数库做成动态函数库
内存的访问速度是硬盘的好几倍,如果将常用的动态函数库加载到内存中(高速缓存
,cache),当软件套件要采用动态函数库时,就不需要重新从硬盘里读出,这样就>可以提高动态函数库的读取速度。这个时候需要ldconfig与 /etc/ld.so.conf的帮助
。将动态函数库加载到高速缓存(cache)中的过程如下:
1 将要写入高速缓存的动态方函数库所在的目录添加到: /etc/ld.so.conf
2 利用ldconfig执行文件将/etc/ls.so.conf读如高速缓存中
3 同时在/etc/ld.so.cache 文件中记录
添加mysql函数库
/usr/lib/mysql
函数库是由系统建立的且有一定功能的函数集合
但是库中对应的函数的源代码一般是不可见的,而对应的头文件中可以看到它的对外接口(函数原型)。
Linux中标准的C函数库放置在/usr/lib下,以文件形式存放。用户也可以根据自己的所需建立自己的用户函数库。函数库分为静态库(.a)和共享库(.so,ShareObj),共享库在windows环境也叫动态链接库(.dll)。
静态库是一些.o目标文件的集合,一般以.a形式结尾。。静态库在程序链接阶段使用,链接器将程序要用到的函数从库中提取出来,并整合到程序中,程序运行不再使用静态库了。
ar rcs lib库文件名.a 目标文件1 目标文件2.。。
r: 将.o文件加入静态库
c 创建静态库
s 产生索引
mkdir bin inlcude obj src lib
创建静态库
方法一:
gcc -o obj/*.o -c src/*.c
ar rcs lib/libfile.a obj/*.o
方法2:
ar rcs lib/libfile.a src/*.c
使用:
gcc -o 可执行文件 调用者的C源文件.c -Ldir -l库文件名
gcc -o obj/main.o -c src/main.c
gcc -o exe main.o -Ldir -lfile
-Ldir path
-lname 库目录文件
删除库文件不会影响可执行程序
gcc -o bin/mymathfun_test src/mymath_test.c -Iinclude -Llib -lmymathfun
共享库即动态链接库,在linux中以.so(share object)为后缀,在windows中以.dll为后缀。程序开始启动运行时,加载所需的函数,程序运行时也需要共享库的支持。共享库链接出来的文件比静态库要小得多。Linux中所有标准的共享库存放在/usr/lib目录中。
gcc -shared -fPCI -o lib库文件名.so 目标文件1,目标文件2,...,目标文件n
-fpci或-fPCI:表示创建产生独立目标代码,具体应用取决于平台;
运行可执行文件提示找汪以库文件的解决方案
sudo cp libmymathfun2.so /usr/lib
export LD_LIBRARY_PATH=库文件目录
删除静态库文件会影响到可执行文件的运行!(提示找不到库文件)
export LD_LIBRARY_PATH=lib
echo $LD_LIBRARY_PATH
// -Iinclude 不要忘了
gcc -o bin/mymathfun_test src/mymath_test.c src/mymathfun.c -Iinclude
查看现实行号
cat -n mymath_test.c