Linux下静态库和动态库使用链接
1.动态库
有一个动态库文件 liba.so
第一种语句
如果liba.so不是是放在默认库目录
那么gcc -o main main.c -la 失败,原因是这条语句只会搜索默认的库路径,不会搜索当前路径,解决方法是加-L指定库的路径,改为:
gcc -o main main.c -L. -la !句中-L.代表也要搜索当前路径
gcc -o main main.c -L/home/code -la !搜索/home/code目录
如果liba.so是放在默认路径下面,比如/lib或/usr/lib或者/usr/local/lib/下面,那么可以直接使用
gcc -o main main.c -la
第二种语句
如果liba.so是放在当前目录下的,那么使用
gcc -o main mian.c ./a.so,
如果liba.so是放在其他目录下的,那么使用
gcc -o main mian.c /xxx/xx/x/a.so
动态库生成的可执行程序在运行时,还是需要动态库的,使用方法包括:
1.将动态库复制到/lib、/usr/lib或/usr/local/lib中。这是系统是可以找到的动态库。
2.编辑/etc/ld.so.conf文件,在里面加入动态库的文件夹路径,运行ldconfig
2.静态库
关于-static选项的说明,指定了这个选项,gcc在连接时对项目所有的依赖库都尝试去搜索名为lib.a的静态库文件,完成静态连接,如果找不到就报错了。这里指的所有是不仅指我们常用的第三方库比如jpeg,png,opencv,zlib…,还包括gcc编译器自带的库libgcc,libstdc++,libc,libm…。
缺点:生成的执行程序体积大,优点:执行程序不需要外部依赖就可以运行。
有一个静态库liba.a
第一种语句
如果liba.a在默认目录下,常用的/lib或/usr/lib或者/usr/local/lib
gcc -o main main.c -la
如果liba.a不在在默认目录下,需要指定目录位置
gcc -o main main.c -L/xxx/xxx/xx -la
第二种表达式
如果liba.a在当前目录下
gcc -o main mian.c ./a.a
如果liba.a是放在其他目录下的,那么使用
gcc -o main mian.c /xxx/xx/x/a.a
静态库生成的可执行程序在运行时, 不再需要静态库。