Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5771833
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: LINUX

2008-09-06 11:28:36

linux 也有导出文档,不用特定的扩展名,且不是在 gcc 中指定参数,而是在 ld 中。写一个导出符号文档,如 symbol 指定您只导出的函数,如 func1。使用 ld 的--retain-symbols-file  参数能够在 static section 里取消 func1 以外的任何函数。这时您用 readelf 看编译好后的 .so 文档 static section 里没有了,使用 nm 看 .so文档他无法查出导出函数。但这并不完全。因为在 dynamic section 里还是会看到任何符号被导出。假如想在 .dynsym 这个 section 里也不让他导出的话,需要再编写一个 script 文档。
指定 global 和 local 在 global 中指定您要导出的函数,简单的格式如下:
{
global: 导出函数名;
local: *;
};
再在 ld 时用 --version-script  选项来 load 您 文档。都完事后再使用 readelf 观察static 和 dynamic section 发现只导出了您指定的函数名即符号。
例:
ld -shared --retain-symbols-file  符号文档 --version-script  脚本文档 -o 动态库文档.so filename.o
阅读(3722) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~