找回密码
 注册
搜索
查看: 5003|回复: 0

[收藏]Linux 动态链接库编程入门

[复制链接]
发表于 2006-11-14 15:21:26 | 显示全部楼层 |阅读模式
    动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就是几个DLL文件构成。这种技术在Linux操作系统下也有对应的实现,就是Linux标准对象Standard Ojbect,对应的文件扩展名为.so。下面通过一个简单的例子开始介绍Linux标准对象。我们的标准对象文件含有一个函数,不需要声明export导出符号,只需要编译器设置即可。如下:
' C& C8 k3 [+ |7 ]- ^0 b2 o  L( A+ v  y
#include <stdio.h>5 f6 V# F- l: N- Z% V
  ?7 \( u: D" M$ O& M9 `
void show()
6 x- x& v+ Q- b{
% [) h2 O8 @! j% ^+ M4 L- L2 y3 |    printf("Standard Object by gashero\n"); ; r$ e0 Y1 N, F7 H4 L
} 9 h0 H' Q8 _5 @( g' U5 G% |
; N% G. _/ w# j9 W$ L5 `1 t' t& A& ]
保存为myso.c文件,按照如下编译: , M% V# Z! ^( e) N9 o! P
6 w! W8 F+ X( d: D8 S# o4 R9 ]
$ gcc -fPIC -shared -o libmyso.so myso.c
' s* m0 G/ ?: R2 S0 _# O! |7 R* w
( u, A3 T. ]% N. @& l: A  执行生成一个libmyso.so文件,按照Linux标准对象的命名惯例,应该在库名称之前加上"lib"前缀,尽管不是必须的。编译开关-fPIC代表函数符号可以重定向,-shared代表编译结果是一个标准对象。
4 C( ?" T5 b5 b! Q  不同于Win32DLL,Linux标准对象中的所有函数都是直接导出的,都可以被调用程序所访问。下面我们编写调用程序:
' y  `+ Y9 [1 R8 C" n. T/ L# O- }0 Q! h/ n+ U9 H3 n( o
#include <stdio.h>
, Z1 @5 i& a7 s' g$ l) m  a9 \6 u
2 o2 ?8 ~! c1 f+ x: Iint main()
% }" B: W9 W0 b' @{ ' I% x" F. X- f. [, r! X% x2 r
  printf("Invoke my so\n"); * W4 Z4 X1 ^. W2 b- @3 {6 W, ^+ _
  show(); & C. ?( n0 x% `. t: P
  return 0;
0 v; g7 l; p% j6 @! e! g} & ?1 _- R: Q  L9 ]
! M' _7 g3 i+ }( y
保存为invoke.c,按照如下gcc开关编译: : y% d' Q9 Q1 K
, g. A. e% `' k- {! H
$ gcc -o test invoke.c ./libmyso.so
# G2 K2 {( i( W) R) i
0 u2 \, ^; G0 Y" m; s; F  编译生成test可执行文件。如上编译条件的最后一条需要是所调用的标准对象文件名,注意必须含有路径。如果只是使用libmyso.so,则必须确保这个文件在可访问的PATH下面。本例所使用的文件名"./libmyso.so"是当前路径下的,使用了相对路径。
4 Y: N1 ~$ {- Y. ~0 k
# t; [2 o4 t. i' m6 \# D测试输出结果如下:
! ]- u3 q5 k" p. }' F$ o2 c2 K2 `9 ^& T! H* O
$ ./test
. E5 W5 k2 p) V9 b$ T. o3 y# q7 z" `$ d& B) J4 P, G. a6 n
Invoke my so
. Z. p( N5 Q! s, K& N/ M" y9 C$ F8 |! p6 ?1 |% }/ g5 [, z
Standard Object by gashero
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-8-13 21:30 , Processed in 0.018620 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表