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

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

[复制链接]
发表于 2006-11-14 15:21:26 | 显示全部楼层 |阅读模式
    动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就是几个DLL文件构成。这种技术在Linux操作系统下也有对应的实现,就是Linux标准对象Standard Ojbect,对应的文件扩展名为.so。下面通过一个简单的例子开始介绍Linux标准对象。我们的标准对象文件含有一个函数,不需要声明export导出符号,只需要编译器设置即可。如下:
' i6 C% |( j( [7 P
! ~1 \3 ~4 B* F! ?& E7 Z- R#include <stdio.h>
  [8 U4 e5 L6 t. H- m
0 p0 P: G0 q2 ]void show()
- I7 {* N* G( J# }) i( F9 _{
, I3 }5 s; L% _    printf("Standard Object by gashero\n");
/ O8 P. [$ L9 r! P& k0 J7 H9 [' s} # h2 d# X/ U: B2 P. L
5 O- k! x% H9 ^( g. _- b
保存为myso.c文件,按照如下编译:
4 p* ^( Q$ ]7 X3 O1 R
5 D9 Q5 ^. ~! v$ gcc -fPIC -shared -o libmyso.so myso.c
& L+ ]& T# L! v2 }! F
/ G( o$ w  Z8 I, q6 M  执行生成一个libmyso.so文件,按照Linux标准对象的命名惯例,应该在库名称之前加上"lib"前缀,尽管不是必须的。编译开关-fPIC代表函数符号可以重定向,-shared代表编译结果是一个标准对象。 " ^! x3 r0 |/ n" W6 q2 R
  不同于Win32DLL,Linux标准对象中的所有函数都是直接导出的,都可以被调用程序所访问。下面我们编写调用程序:
5 z/ n0 C! s2 \" p3 w# H
5 @' O7 u2 m4 F5 _#include <stdio.h>: |( i; s) A7 k+ V, A, x. L7 q) e" r
4 \2 O/ V/ A. v
int main() , j  h+ v$ {, u  q6 e2 H0 g& m2 C8 T
{ ) M2 i5 K6 r8 d' K, U+ I
  printf("Invoke my so\n"); 0 o$ L% y/ H3 z* A3 \+ x+ p' l
  show();
9 g8 Z+ ]) w  j' F, B* q   return 0;
1 D/ X, x+ ?0 U5 h}
* H1 I( a+ s2 `
+ G4 C9 X% z: l5 L1 G- F; y2 x/ r& U- b保存为invoke.c,按照如下gcc开关编译: % i" x* ]+ @' N+ o# a; ?# {

" \! I" L; z) v$ R& i% u$ gcc -o test invoke.c ./libmyso.so
: P+ a  G2 n* J( G% {6 I+ o. M0 H$ g
9 I/ V/ _( [7 R' \0 ^) l  编译生成test可执行文件。如上编译条件的最后一条需要是所调用的标准对象文件名,注意必须含有路径。如果只是使用libmyso.so,则必须确保这个文件在可访问的PATH下面。本例所使用的文件名"./libmyso.so"是当前路径下的,使用了相对路径。
/ R% d# v4 l5 A0 D. u
5 G! `1 ^/ G, U, {! k' [/ i测试输出结果如下: ' v. y% r+ A6 _5 g# f  ?

9 C- D/ \! x+ o& B" F4 U' L$ ./test
) M* C; z( q, L! w+ J0 h  N, ^8 l, K. ~* i7 A  ]( z5 z+ t
Invoke my so
" W! z% P. @) I( m: V& O$ x
7 R: P& x' h" ]# N: N/ iStandard Object by gashero
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 22:35 , Processed in 0.017954 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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