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
阅读(3670) | 评论(0) | 转发(0) |