转载请标明: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

最新文章

  1. MySql数据库忘记root密码
  2. bootstrap如何给.list-group加上序号
  3. python类的特性
  4. android 项目学习随笔十九(MD5)
  5. JavaScript数学揭密之函数与勾股定理
  6. (13)odoo翻译
  7. UI:UITableView表视图
  8. [一]初识Ajax
  9. hdu_5883_The Best Path(欧拉路)
  10. 1630/2023: [Usaco2005 Nov]Ant Counting 数蚂蚁
  11. SQL Server中INNER JOIN与子查询IN的性能测试
  12. java语言插入数组中一个数,仍然能够实现排序
  13. neo4j-cypher
  14. jq动画实现左右滑动
  15. Java Web——过滤器
  16. 04: nginx部署vue
  17. BZOJ2721 Violet5樱花(数论)
  18. java struts2入门学习---国际化
  19. javascript的fn方法(转)
  20. Linux 系统的/目录

热门文章

  1. Hadoop编程1:天气数据AWK & MapReduce
  2. 虚拟主机无法使用fsockopen操作处理方法
  3. 161222、Bootstrap table 服务器端分页示例
  4. wex5 教程 之 图文讲解 全局可观察变量与登陆状态全局控制
  5. [Python]如何获取目录下,最后更新的文件
  6. 【宽度优先搜索】神奇的状态压缩 CodeVs1004四子连棋
  7. Python多进程编程
  8. [问题2015S12] 复旦高等代数 II(14级)每周一题(第十三教学周)
  9. HTML学习开篇
  10. 数据转换为json格式的方法