linux下静动态库的添加
Contents
静态库
为了在编译程序中正确找到库文件,静态库必须按照 lib[name].a 的规则命名,如下例中[name]=pr.
在linux环境中, 使用ar命令创建静态库文件。
ar参数意义如下:
d: 从指定的静态库文件中删除文件
m: 把文件移动到指定的静态库文件中
p: 把静态库文件中指定的文件输出到标准输出
q: 快速地把文件追加到静态库文件中
r: 把文件插入到静态库文件中
t: 显示静态库文件中文件的列表
x: 从静态库文件中提取文件
a: 把新的目标文件(*.o)添加到静态库文件中现有文件之后
$ ar -rv libpr.a pr1.o pr2.o
a - pr1.o
a - pr2.o
$ ar -t libpr.a
pr1.o
pr2.o
编译链接选项
-L 及-l 参数放在后面.其中,-L 加载库文件路径,-l 指明库文件名字.
$ gcc -o main main.c -L../ -lpr //生成main
编译完主程序后,静态链接库即可删除。
动态库
建立动态链接库
gcc -fPIC -shared -o libxxx.so xxx.c
链接动态库
``` gcc -o mian main.c -L. -lsacio gfortran -o main test.f -L/home/mars/.Setup -lsacio
这个跟静态库一模一样的,-L指明链接库的路径, -l指明库文件名,因此 当静态库动态库重名时会优先使用动态库。
# 添加链接库路径
个人认为修改相应环境变量来指定链接库位置最为方便
## 修改makefile文件中环境变量
该环境变量只在该makefile文件中生效
LD_LIBRARY_PATH = LIBRARY_PATH = …
## 修改`~/.bash_profile`文件
永久生效,适合个人默认库文件路径
export LIBRARY_PATH=/Users/Mars/.Setup/LIBs:$LIBRARY_PATH export LD_LIBRARY_PATH=/Users/Mars/.Setup/LD_LIBs:$LD_LIBRARY_PATH
Author F. Cheng
LastMod 2016-09-29