几种不同UNIX系统常用的动态连接库建立的参数说明

原创 2006年05月16日 21:57:00
********几种不同UNIX系统常用的动态连接库建立的参数说明*****

 

创建共享库和链接可执行文件类似:首先把源代码编译成目标文件, 然后把目标文件链接起来.目标文件需要创建成 位置无关码(position-independent code) (PIC),概念上就是在可执行程序装载它们的时候, 它们可以放在可执行程序的内存里的任何地方, (用于可执行文件的目标文件通常不是用这个方式编译的.) 链接动态库的命令包含特殊标志,与链接可执行文件的命令是有区别的. --- 至少理论上如此.在一些系统里的现实更恶心. 

在下面的例子里,我们假设你的源程序代码在 foo.c 文件里并且将创建成名字叫 foo.so的共享库.中介的对象文件将叫做 foo.o,除非我们另外注明.一个共享库可以 包含多个对象文件,不过我们在这里只用一个. 

 


BSD/OS 
创建 PIC 的编译器标志是 -fpic.创建共享库的链接器标志是 -shared. 

gcc -fpic -c foo.c
ld -shared -o foo.so foo.o
上面方法适用于版本 4.0 的 BSD/OS. 

FreeBSD 
创建 PIC 的编译器标志是 -fpic.创建共享库的链接器标志是 -shared. 

gcc -fpic -c foo.c
gcc -shared -o foo.so foo.o
上面方法适用于版本 3.0 的 FreeBSD. 

HP-UX 
创建 PIC 的系统编译器标志是 +z.如果使用 GCC 则是 -fpic. 创建共享库的链接器标志是 -b.因此 

cc +z -c foo.c
或 

gcc -fpic -c foo.c
然后 

ld -b -o foo.sl foo.o
HP-UX 使用 .sl 做共享库扩展,和其它大部分系统不同. 

IRIX 
PIC 是缺省,不需要使用特殊的编译器选项. 生成共享库的链接器选项是 -shared. 

cc -c foo.c
ld -shared -o foo.so foo.o

Linux 
创建 PIC 的编译器标志是 -fpic.在一些平台上的一些环境下, 如果 -fpic 不能用那么必须使用-fPIC. 参考 GCC 的手册获取更多信息. 创建共享库的编译器标志是 -shared.一个完整的例子看起来象: 

cc -fpic -c foo.c
cc -shared -o foo.so foo.o

NetBSD 
创建 PIC 的编译器标志是 -fpic.对于 ELF 系统, 带 -shared 标志的编译命令用于链接共享库. 在老的非 ELF 系统里,使用ld -Bshareable. 

gcc -fpic -c foo.c
gcc -shared -o foo.so foo.o

OpenBSD 
创建 PIC 的编译器标志是 -fpic. ld -Bshareable 用于链接共享库. 

gcc -fpic -c foo.c
ld -Bshareable -o foo.so foo.o

Solaris 
创建 PIC 的编译器命令是用 Sun 编译器时为 -KPIC 而用 GCC 时为 -fpic.链接共享库时两个编译器都可以用 -G 或者用 GCC 时还可以是 -shared. 

cc -KPIC -c foo.c
cc -G -o foo.so foo.o
或 

gcc -fpic -c foo.c
gcc -G -o foo.so foo.o

Tru64 UNIX 
PIC 是缺省,因此编译命令就是平常的那个. 带特殊选项的 ld 用于链接: 

cc -c foo.c
ld -shared -expect_unresolved '*' -o foo.so foo.o
用 GCC 代替系统编译器时的过程是一样的;不需要特殊的选项. 

UnixWare 
SCO 编译器创建 PIC 的标志是-KPIC GCC 是 -fpic. 链接共享库时 SCO 编译器用 -G 而 GCC 用-shared. 

cc -K PIC -c foo.c
cc -G -o foo.so foo.o
or 

gcc -fpic -c foo.c
gcc -shared -o foo.so foo.o


技巧: 如果你想把你的扩展模块打包,用在更广的发布中,那么你应该考虑使用 GNU Libtool 制作共享库.它把平台之间的区别封装成 了一个通用的并且非常强大的接口.严肃的包还要求考虑有关库版本, 符号解析方法和一些其他的问题. 

生成的共享库文件然后就可以装载到 PostgreSQL里面去了.在给 CREATE FUNCTION 命令声明文件名的时候,我们必须声明 共享库文件的名字而不是中间目标文件的名字.请注意你可以在 CREATE FUNCTION 命令上忽略 系统标准的共享库扩展 (通常是.so或.sl), 并且出于最佳的兼容性考虑也应该忽略.

类Unix系统常用命令df和du详解

df命令详细用法 a:显示全部的档案系统和各分割区的磁盘使用情形 i:显示i -nodes的使用量 k:大小用k来表示 (默认值) t:显示某一个档案系统的所有分割区磁盘使用量 x:显示...
  • paluo
  • paluo
  • 2011年10月07日 13:28
  • 9510

UNIX系统常用命令

UNIX系统常用命令格式: command [flags] [argument1] [argument2] ... 其中flags以-开始,多个flags可用一个-连起来,如ls -l -a ...

HP-UNIX系統監控---個人手記(常用命令)——转自diveming

一、性能監控-vmstat vmstat命令用来获得有关进程、虚存、页面交换空间及CPU活动的信息。这些信息反映了系统的负载情况。vmstat首次运行时显示自系统启动开始的 各项统计信息,之后运行v...

syslog:类Unix系统常用的log服务

当前的一个项目需要音视频的技术,而公司刚好没有类似的产品。幸好开源社区如此的强大,稍微谷歌一下,就找到了强大的Kamailio整合Asstersik的解决方案。 接下来的事情非常顺利,安装ubunt...

Unix系统与Windows系统下的常用命令整理

最近在学OC,打算搞ios开发,开发过程中,免不了使用Mac Os X系统。以前没注意,用了才发现原来苹果的系统是基于Unix开发的,然后,一时手痒,练了练以前学习过的Unix下的命令操作,又想起最近...

linux/unix系统时间相关的结构体及其说明

在C语言涉及中经常需要定时触发事件,涉及到获取系统时间,其结构体类型有多种。Unix/Linux系统下有以下几种时间结构: 1、time_t 类型:长整型,一般用来表示从1970-01-01 00:...
  • rosekin
  • rosekin
  • 2013年12月10日 16:50
  • 1304

UNIX常用命令详解及UNIX系统上的文本操作简介

一、注意事项 命令和参数之间必需用空格隔开,参数和参数之间也必需用空格隔开。 一行不能超过256个字符;大小写有区分。 二、特殊字符含义 文件名以“.”开头的都是隐藏文件/目录,只需在文件/目录名前...

模拟UNIX系统文件管理成组连接算法(12.20更新中...)

//[原创][5.磁盘存储空间的管理/十大题型]算法全实现 /*五 磁盘存储空间的管理 主要有: 位示图 和内存的位示差不多 空闲块表 和可变内存管理差不多 空闲块链 主要是UNIX成组链接法...
  • zww0815
  • zww0815
  • 2011年12月20日 23:19
  • 1308

第二章 UNIX系统安装与常用命令

  • 2015年07月08日 08:35
  • 2.12MB
  • 下载

UNIX系统常用命令

  • 2013年04月17日 21:32
  • 52KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:几种不同UNIX系统常用的动态连接库建立的参数说明
举报原因:
原因补充:

(最多只允许输入30个字)