BLUESKY
一步一个脚印向前走
今天在网上突然搜索到了关于链接库如何生成的文章,在平时接触到的代码中也有这方面的应用,于是看了看,还是决定收藏在我的blog中,以后可以多看看,具体的内容如下:

    如果程序是在编译时加载库文件的,就是使用了静态库。如果是在运行时加载目标代码,就成为动态库。换句话说,如果是使用静态库,则静态库代码在编译时就拷贝到了程序的代码段,程序的体积会膨胀。如果使用动态库,则程序中只保留库文件的名字和函数名,在运行时去查找库文件和函数体,程序的体积基本变化不大
    静态库的原则是“以空间换时间”,增加程序体积,减少运行时间
    动态库的原则是“以时间换空间”,增加了运行时间,但减少了程序本身的体积

   静态库文件的扩展名一般为.a,其编写步骤很简单
 ⑴编写函数代码
 ⑵编译生成各目标文件
 ⑶用ar文件对目标文件归档,生成静态库文件
    注意归档文件名必须以lib打头
   使用要点:
   ⑴在gcc 的-I参数后加上静态库头文件的路径
   ⑵在gcc 的-L参数后加上库文件所在目录
   ⑶在gcc 的-l参数后加上库文件名,但是要去掉lib和.a扩展名
     比如库文件名是libtest.a 那么参数就是 -l test

制作库文件
 ⑴生成目标文件
  gcc -c myprogram.c
  执行完后会生成一个myprogram.o文件
 ⑵用ar命令归档,格式为ar -rc <生成的档案文件名> <.o文件名列表>
 再次提醒,归档文件名一定要以lib打头, .a结尾。
  ar -rc libmyprogram.a myprogram.o
  执行完后会生成一个libmyprogram.a文件

编译目标文件,注意要把静态库头文件的路径加到-I参数里面
   gcc -I/directory/to/include -o main.o -c main.c
现在生成了一个main.o文件
生成可执行文件,注意要把静态库文件的路径加到-L参数里面,
把库文件名(去掉打头的lib和结尾的.a)加到-l参数后面。如下面所示
  gcc -o main -L/directory/to/lib   main.o -lmyprogram
此时就会生成一个名为main的可执行文件
另外,注意- l参数好象应该加到输入文件名的后面,否则会报错

上面的就是静态库的操作方法,也是平时比较多的用到的,另外一个动态库就暂时不去学习了,等用到了再说了,网上的资料很多.......
posted on 2007-11-17 22:00 LG 阅读(1144) 评论(0)  编辑 收藏 引用 所属分类: UnixProgram

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

相册

最新评论