快速业务通道

Linux系统基础开发技术1:构建Linux 库文件

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-13
则重启后不失效,否则在shell中设置重启后失效.
我们使用A方法中的-f选项:

gnuhpc@gnuhpc-desktop:~/MyCode/lib/shared$ vi libctest.conf
gnuhpc@gnuhpc-desktop:~/MyCode/lib/shared$ sudo ldconfig -f libctest.conf
gnuhpc@gnuhpc-desktop:~/MyCode/lib/shared$ ./prog
Valx=5
gnuhpc@gnuhpc-desktop:~/MyCode/lib/shared$ ldd prog
linux-gate.so.1 => (0x00f6f000)
libctest.so.1 => /usr/local/lib/libctest.so.1 (0x005d9000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00718000)
/lib/ld-linux.so.2 (0x001e6000)

其中libctest.conf中写入路径:/usr/local/lib.程序运行正常.

4.动态加载库的使用

动态加载库是在非程序启动时动态加载进入程序的库,这对于实现插件或动态模块有很大的帮助.在Linux中,动态加载库的形式并不特殊,它使用上述两种程序库,使用提供的API在程序运行时动态加载.注意,在不同平台上动态加载库的API并不相同,可能会有移植问题出现.

我们可以通过nm命令先查看一下我们创建的库里面有哪些symbol(可以理解为函数方法)供我们使用:

gnuhpc@gnuhpc-desktop:~/MyCode/lib$ nm /usr/local/lib/libctest.so
00001f18 a _DYNAMIC
00001ff4 a _GLOBAL_OFFSET_TABLE_
w _Jv_RegisterClasses
00001f08 d __CTOR_END__
00001f04 d __CTOR_LIST__
00001f10 d __DTOR_END__
00001f0c d __DTOR_LIST__
000005a0 r __FRAME_END__
00001f14 d __JCR_END__
00001f14 d __JCR_LIST__
00002014 A __bss_start
w __cxa_finalize@@GLIBC_2.1.3
00000540 t __do_global_ctors_aux
00000420 t __do_global_dtors_aux
00002010 d __dso_handle
w __gmon_start__
000004d7 t __i686.get_pc_thunk.bx
00002014 A _edata
0000201c A _end
00000578 T _fini
000003a0 T _init
00002014 b completed.7021
000004dc T ctest1
000004ec T ctest2
00002018 b dtor_idx.7023
000004a0 t frame_dummy
000004fc T main
U printf@@GLIBC_2.0

这个命令对静态库和共享库都支持,第二列为symbol类型,小写字母表示符号是本地的,大写字母表示符号是全局(外部)的,几个常见的字母含义如下:T为代码段普通定义,D为已初始化数据段,B为未初始化数据段,U为未定义(用到该符号但是没有在该库中定义).

我们创建ctest.h:

1: #ifndef CTEST_H
2: #define CTEST_H
3:
4: #ifdef __cplusplus
5: extern "C" {
6: #endif
7:
8: void ctest1(int *);
9: void ctest2(int *);
10:
11: #ifdef __cplusplus
12: }
13: #endif
14:
15: #endif这里使用extern C是为了该库既可以用于C语言又可以用于C .

我们动态加载库进来:progdl.c

1: #include
2: #include
3: #include "ctest.h"
4:
5: int main(int argc, char **argv)

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号