在Linux下进行C/C++开发经常要创建和使用库,包括静态库和动态库(共享库)。
静态库文件的扩展名是.a,其命名规则是libxxx.a,
动态库的扩展名是.so,其命名规则是libxxx.so。
静态库和动态库在链接调用的是都是 -lxxx。
静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。
下面讲一下静态库和动态库具体创建和使用
(1)静态库
假如我们要将源文件test.c编译成静态库,首先,源文件编译成目标文件
cc -c test.c
编译成功之后会生成目标文件test.o,然后由目标文件创建成库
ar crs libtest.a test.o
创建好库之后,怎么使用呢,比如我们要在编译main.c是使用test库,
cc -o main main.c -L. -ltest
-L.表示在当前目录下找库文件
-L/home/aop/lib表示在目录lib下找库文件
(2)动态库
创建动态库第一步也是将源文件编译成目标文件,然后用目标文件创建成库
cc -shared -fPIC -o libtest.so test.c
使用时与静态库类似
cc -o main main.c -L. -ltest
在使用动态库时,若不指定库文件目录,既不用 -L.,则要设置环境变量LD_LIBRARY_PATH,将其设为当前目录即可。或者将动态库文件拷贝到/usr/lib或/lib中,然后运行ldconfig更新即可,还可以修改/etc/ld.so.conf,将当前目录追加的该文件中
pwd >> /etc/ld.so.conf
然后运行ldconfig命令更新下即可
实例:(对库文件路径和库文件集中处理,使用变量)
PROLIBPATH="/home/ezlink/usr/yk/tool/Log_app/ -llog -llog1" 库文件路径
cc -o TESTLOG testLog.c -L$PROLIBPATH
静态库文件的扩展名是.a,其命名规则是libxxx.a,
动态库的扩展名是.so,其命名规则是libxxx.so。
静态库和动态库在链接调用的是都是 -lxxx。
静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。
下面讲一下静态库和动态库具体创建和使用
(1)静态库
假如我们要将源文件test.c编译成静态库,首先,源文件编译成目标文件
cc -c test.c
编译成功之后会生成目标文件test.o,然后由目标文件创建成库
ar crs libtest.a test.o
创建好库之后,怎么使用呢,比如我们要在编译main.c是使用test库,
cc -o main main.c -L. -ltest
-L.表示在当前目录下找库文件
-L/home/aop/lib表示在目录lib下找库文件
(2)动态库
创建动态库第一步也是将源文件编译成目标文件,然后用目标文件创建成库
cc -shared -fPIC -o libtest.so test.c
使用时与静态库类似
cc -o main main.c -L. -ltest
在使用动态库时,若不指定库文件目录,既不用 -L.,则要设置环境变量LD_LIBRARY_PATH,将其设为当前目录即可。或者将动态库文件拷贝到/usr/lib或/lib中,然后运行ldconfig更新即可,还可以修改/etc/ld.so.conf,将当前目录追加的该文件中
pwd >> /etc/ld.so.conf
然后运行ldconfig命令更新下即可
实例:(对库文件路径和库文件集中处理,使用变量)
PROLIBPATH="/home/ezlink/usr/yk/tool/Log_app/ -llog -llog1" 库文件路径
cc -o TESTLOG testLog.c -L$PROLIBPATH