首页 > 其他 > 详细

利用GCC编译器生成动态链接库和静态链接库

时间:2016-09-04 00:00:27      阅读:254      评论:0      收藏:0      [点我收藏+]

转载请标明:http://www.cnblogs.com/winifred-tang94/

1、编译过程

gcc –fPIC –c xxx.c

其中-fPIC是通知gcc编译器产生位置独立的目标代码。链接的时候不通过拷贝来进行。

2、链接过程

gcc –shared –o libxxx.so xxx.o

经过编译链接就可以生成动态链接库,其扩展名为.so

Eg.

技术分享

还可以gcc –fPIC –shared -o libhello.so hello.c

技术分享

举个例子:

//Hello.h

技术分享

//hello.c

技术分享

//main.c

技术分享

先生成动态链接库

技术分享

然后编译链接main.c

技术分享

但是把-lhello放在文件名后面就没有问题了,并生成了一个main执行文件:

技术分享

运行执行文件的时候出现了以下问题:

技术分享

原因可能是程序运行时并不知道动态库所在的路径,因此自然未找到。

解决方法:

拷贝动态链接库到系统共享目录下,或在系统共享目录下为该动态链接库建立连接(硬连接或符号连接均可,常用符号连接)。

技术分享

其中ldconfig是为了让动态链接库为系统所共享。

动态链接库被系统所共享以后,再运行main,得到结果如下:

技术分享

利用GCC编译器生成静态链接库

用个例子来说明如何在gcc编译器中生成静态链接库

//Hello.h

技术分享

//hello.c

技术分享

//main.c

技术分享

首先gcc –c hello.c文件生成hello.o

技术分享

然后利用hello.o生成静态链接库,利用

ar –rc –o libhello.a hello.o

技术分享

或者利用 ar rcs –o libhello.a hello.o

技术分享

然后利用静态链接库编译链接main.c

技术分享

利用GCC编译器生成动态链接库和静态链接库

原文:http://www.cnblogs.com/winifred-tang94/p/5838324.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!