Chinaunix首页 | 论坛 | 博客
  • 博客访问: 120779
  • 博文数量: 30
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2015-12-14 10:05
个人简介

坚持学习,每天进步一点点……

文章分类

全部博文(30)

文章存档

2017年(13)

2016年(17)

分类: LINUX

2016-01-26 18:43:32

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/文件夹下搜索动态库文件。


阅读(2513) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~