目录
1.3 动态库的制作 格式:xxx.so 或 xxx.dll
介绍
使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。
程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries):
1、静态函数库,是在程序执行前就加入到目标程序中去了
- 优点:可执行程序直接运行,不需要额外链接,运行速度快
- 缺点:加入多个程序共同使用同一个静态库,相当于把多段相同的代码保存在不同的可执行 程序中,在空间上有一定浪费。
2、动态函数库 可执行程序只保存对应的函数引用表,只有程序执行时,再链接对应的库。
- 优点:多个可执行程序共用同一个库,节省内存。
- 缺点:运行可执行程序需要额外做一次链接操作,执行速度相对慢。
静态库与动态库的制作与使用
1.1 静态库的制作 格式xxxx.a
第一步生成.o文件: gcc xxx.c -c
例:gcc text.c -c文件 (仅源文件生成.o文件,主程序不用生成.o文件)
第二步打包.o文件生成静态库: ar rcs 静态库名字.a 所有需要打包的.o文件
例:ar rcs libtext.a text2.o (库名字尽量由lib开头)
1.2 静态库的使用
生成可执行文件:gcc text1.c -ltext -L ./ -o demo1
-ltext: -l指定要用的静态库,库名砍头(lib)去尾(.a)
-L:告诉gcc编译器从-L指定的路径去找静态库。默认是从/usr/lib 或 /usr/local/lib 去找
1.3 动态库的制作 格式:xxx.so 或 xxx.dll
生成动态库:gcc -shared -fpic -o 动态库名字.so 所有需要的源文件
-shared: 指定生成动态库
-fpic: 作用于编译阶段,在生成目标文件时使用,以生成位置无关的代码
例: gcc -shared -fpic text2.c -o libtext.so 库名字尽量由lib开头)
1.4 动态库的使用
生成可执行文件:gcc text1.c -ltext -L ./ -o demo2
-ltext: -l指定要用的动态库,库名砍头(lib)去尾(.so)
-L:告诉gcc编译器从-L指定的路径去找动态库。默认是从/usr/lib 或 /usr/local/lib 去找
linux的动态库默认搜索路径为/usr/lib与/usr/local/lib ,找不到程序运行就会出错,所以在运行 程序前要指定动态库的搜索路径
指定动态库搜索路径:
export LD_LIBRARY_PATH=“路径名”
(该方式仅对当前的终端有效)