首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>系统管理>系统管理>正文

Linux下动态库的生成及链接方法

http://www.oklinux.cn  2007-08-07  赛迪网 skid  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

 

二、动态库的编译方法

 

编译库文件myfunction.c:

 

debian:/home/program# gcc -shared -o libmyfunction.so myfunction.c

 

如果编译成功,会在/home/program/下生成动态库文件:libmyfunction.so。

这里有两点需要说明:

1.对Linux操作,一般都推荐在普通用户模式下,如果需要超级用户的权限,则可以通过su root,输入root用户密码切换。我是个人学习使用,同时又有很多的操作都要使用root用户,因此就直接在root用户下进行编译。

 

2.编译生成动态库的命令为:gcc (-fpic) -shared -o libmyfunction.so myfunction.c

-fpic 使输出的对象模块是按照可重定位地址方式生成的。

-shared指定把对应的源文件生成对应的动态链接库文件。

 

三、动态库的测试方法

 

编译测试文件test.c:

 

debian:/home/program# gcc -o test test.c /home/program/libmyfunction.so

 

成功编译后,生成test文件,运行test:

 

debian:/home/program# ./test

Library routine called from libmyfunction.so!

 

其中,gcc -o test test.c /home/program/libmyfunction.so的最后一个参数指定所链接库文件的绝对路径。本例中库文件的绝对路径为:/home/program/libmyfunction.so。

 

当然,如果想从系统的库文件路径(通常系统函数库的位于/usr/lib下)链接动态库的话,可以先将生成的库文件拷贝至/usr/lib/下,然后再链接:

 

debian:/home/program# cp libmyfunction.so /usr/lib/

debian:/home/program# gcc -o test test.c -lmyfunction

debian:/home/program# ./test

 

Library routine called from libmyfunction.so!

 

这里,对于链接的方法作一下解释。对于gcc -o test test.c -lmyfunction中最后一个参数-lmyfunction,可见传给C编译器的命令行参数并未提到函数库的完整路径名,甚至没有提到在函数库目录中该文件的完整名字!实际上,编译器被告知根据选项-lmyfunction链接到相应的函数库(/usr/lib下),函数库的名字是 libmyfunction.so,也就是说,"lib"部分和文件的扩展名被省略了,但在前面加了一个"l"。

 

 

共2页: 上一页 [1] 2 下一页

上一篇:ATI显卡的机器上安装Linux花屏解决办法   下一篇:Linux两种简单替代“花生壳”软件的办法

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux用户口令安全恢复方法介绍
·Debian系统下Latex+Dvipdfm中文解决方案
·快速安全的建立Linux操作系统的用户账户
·Linux服务器前台常出现的错误提示及含意
·在 POWER5 上配置 SUSE Linux 实现性能最大化
·Linux运行模式Runlevel技术解析
·Ubuntu Linux系统上的三款超强监视工具
·Ubuntu Linux系统下查看版本的两个命令
·Linux内存磁盘初始化技术详细解析
·Ubuntu Linux系统三种方法添加本地软件库
·在 Linux on POWER 上利用透明大内存页
·内存管理内幕 动态分配的选择、折衷和实现
·让linux系统内存不再泄漏的好方法
·Linux启动时间的极限优化方案
·让Ubuntu Linux支持第三方无线网卡的方法
·Ubuntu Linux系统常见问题解决方法集锦
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·VirtualBox为Ubuntu系统配置共享文件夹
·Ubuntu下安装Netgear WG511v2 无线网卡
·Redhat Enterprise Linux磁带机简单操
·Linux系统下创建DBCA报错的解决方法
·Fedora和XP双系统中网卡Realtek冲突问
·Ubuntu开机自动挂载Win分区
·ubuntu8.04如何访问其它分区
·Fedora 9的安全措施
· 移动Linux系统中的TMP分区
·双Linux和多Linux系统的安装方法介绍
·轻松设置Wine程序的中文显示
·Linux系统下强大的杀毒软件:Avast
  阅读排行
·在Linux系统下查看端口的使用情况及启
·在Linux操作系统下查看磁盘空间的好方
·使用源代码将 Glibc 升级到 2.6
·Useradd和Adduser添加用户工具使用方法
·Linux系统的头文件和库文件搜索路径
·Linux下推荐的常用应用程序列表
·Linux环境进程间通信——信号(上)
·设置GRUB默认启动系统及Menu.lst参数介
·Linux系统挂载U盘和硬盘光驱的问题
·Df命令:查看Linux磁盘剩余空间方法介
·什么是Linux?Linux与UNIX之间的关系
·Linux系统利用Crontab命令实现定时重启
·使用 ActiveScaffold 增强 Ruby on Rai
·Linux系统下常用命令及账户管理
·新手入门:手把手教你如何写Makefile
网摘收藏: