Linux程序编译(四)
静态库创建
静态库的创建可以使用ar命令。生成静态库的格式为:
ar rcs name.a object1.o object2.o……objectn.o
rcs为常用的创建静态库的ar命令选项,r表示将文件插入库文件中,c表示创建库文件,s表示库文件中若包含对象模式,则建立备存文件的符号表。
例如,若想吧一个libstatic.o的文件编译成一个libstatic静态库,可以使用:
ar rcs libstatic.a libstatic.o
这样便生成了一个libstatic.a的静态库文件。此时生成的静态库文件没有可执行的功能,因为Linux默认的生成文件权限是666,可以给它另外指定可执行权限:chmod u+x libstatic.a。注意静态库的名称需要以lib开头
静态库引用
静态库的引用可以有三种方式:使用gcc的-L和-l选项来指定静态库、使用-static来指定静态库的绝对路径、添加静态库到系统的库文件路径中。
使用-L和-l
gcc的-L选项用于指定静态库的搜索路径,-l用于指定在-L路径下使用的静态库。使用方式如下:
gcc main.c -L../lib/ -lstatic -o test(-l选项使用的库的名称中不包含库前的lib和后缀)
上式中-L以及-l后均不含空格。表示在链接时使用的是上层目录的lib文件夹下libstatic.a的静态库文件
使用-static
使用-static需要指明相对路径或者是绝对路径,相当于-L和-l的集合。使用方式为:
gcc main.c -static ../lib/libstatic.a -o test(需要加上lib以及后缀名)
使用系统库文件路径
系统默认的库文件搜索路径是/lib和/usr/lib/,若想自己添加自己的库文件路径在系统中,可以修改/etc/ld.so.conf或者是在/etc/ld.so.conf.d 下新建一个.conf文件,在文件中指定库文件所在路径,链接时使用-l指明库文件就行。
动态库创建
动态库的创建可以使用gcc的-shared选项,配合使用-fPIC来生成位置无关代码,生成动态库的指令如下:
gcc -shared -fPIC -o name.so xxx.c
上面便生成了一个name.so的动态库文件
动态库引用
动态库的引用可以有三种形式:
1.gcc xxx.c path(动态库的相对路径) -o test
2.gcc xxx.c -L path(动态库的相对路径或者是绝对路径) -l+name(动态库的路径) -o test -Wl,-rpath path(动态库的相对路径或者是绝对路径)(-L指定动态库的存放路径,-l用于指定将使用的动态库名称,且动态库名称必须以lib开头,-l参数后不加lib。-Wl,-rpath用于为链接后的程序指定运行时动态库的路径,否则会提示函数未定义的错误)
3.修改/etc/ld.so.conf文件或者是在/etc/ld.so.conf.d文件夹中添加任意.conf文件,在新添加的.conf文件中加入lib的存放路径。然后以root身份执行ldconfig命令,该命令将会根据默认路径以及/etc/ld.so.conf和/etc/ld.so.conf.d文件夹中的conf文件中指定的路径去加载路径。系统默认情况下会在/lib或者/usr/lib/文件夹下搜索动态库文件。
阅读(2569) | 评论(0) | 转发(0) |