Linux导出函数控制,linux 下仅导出指定函数的方法
節整理資料時,發現了這個,是兩年前在 LOVEUNIX 上的回帖。自己都忘了,貼在這里
做個備份。
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: *;
};
其中symbol文件的格式是:
一行一個函數名。
需要注意的是.c文件在生成.o文件時,需要制定-fPIC參數。
eg:gcc -c -fPIC test.c
這時生成的test.o才可以。
再在 ld 時用 --version-script??選項來 load 你 文件。都完事后再使用 readelf 觀察
static 與 dynamic section 發現只導出了你指定的函數名即符號。
例:
ld -shared --retain-symbols-file??符號文件 --version-script??腳本文件 -o 動態庫文件.so filename.o
總結
以上是生活随笔為你收集整理的Linux导出函数控制,linux 下仅导出指定函数的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eureka 集群失败的原因_Eurek
- 下一篇: 保存图像_06 - matplotlib