静态库

为了在编译程序中正确找到库文件,静态库必须按照 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