- 主题:Re: gcc交叉编译库选项 -ffunction-sections带来的问题
strip一下试试?
带static的你也可以手动混淆嘛, 用宏替换成乱七八糟的名字
【 在 feiy (万事皆相通) 的大作中提到: 】
用gcc交叉编译库,带选项 -ffunction-sections,可以让生成的库,在被链接时,只会加入被用到的函数模块,没有被用到的函数模块不会链接进来,所以可以节省代码空间。
但是,使用这个选项后,在所生成的库文件的未尾,会有大量的 .text:[函数模块名] 以文本可读的方式存在。它不仅列出了库里对外公开的接口函数名,而且许多标注为static的内部函数名也都以这种方式可读存在。本来对一些函数使用static的目的,就是为了将内部函数在库里做一些保密。如果没有这个选项,生成的库里只会显性可读那些不带static的函数,带static的函数都不会显性可读。结果加上这个选项后,在生成的库的.text:[函数模块名]部分,将所有的函数,包括static标注的函数模块,都给显性出来了。
请问有何办法,既实现-ffunction-sections的目的,让static标注的函数名不要在库里出现,包括以.text:[函数模块名]的方式?
--
修改:feiy FROM 115.171.40.*
FROM 14.131.7.*
我详细看了一下 确实是
可以尝试在希望隐藏的函数前加__attribute__((section("demo_section_name")))
手动指定section的名字
如果这些static的函数是一定会用到的,可以直接指定到.text里
我写demo验证过了没问题
【 在 feiy 的大作中提到: 】
: 谢谢!
: 不过花了一些时间从头看到了尾,结果有种看《走进科学》的感觉。:-)
: 这个链接,首先说了一大堆 visibility("hidden") 不能掩藏函数,然后说用static 加
: ...................
--
FROM 221.218.142.*
自己写连接脚本,把所有.text.*合并到.text。
--
FROM 117.136.0.*
那就失去-ffunction-section的意义了
【 在 prc79 的大作中提到: 】
: 自己写连接脚本,把所有.text.*合并到.text。
--
FROM 114.242.203.*
- function-section,要求每个函数都是独立的section
- section之间的地址关系是linker决定的,编译期不知道
> 需要暴露section内信息,否则linker没办法干活儿了
不用func-sect,translation unit是一个输出section,可以有相对地址关系
总不能让linker无中生有是吧
【 在 feiy (万事皆相通) 的大作中提到: 】
:
: ※ 修改:·feiy 于 Jul 16 12:19:23 2020 修改本文·[FROM: 115.171.40.*]
: ※ 来源:·水木社区 newsmth.net·[FROM: 115.171.40.*]
--
修改:feiy FROM 115.171.40.*
FROM 123.118.102.*
1、不一定放到text,可以指定别的名字,每个函数指定一个
2、如果函数名还在,可能还有别的地方要改 至少我测试用的简单demo这样操作后.o文件中没有函数名了
【 在 feiy 的大作中提到: 】
: 在gcc里,使用__attribute__((section(".text"))) 的确可以把-ffunction_section为
: 每个函数单独设置的section取消(都放置到了.text里了),所以,在末尾的段声明部
: 分,的确不再有这些期望隐藏的函数对应的 .text.[函数名]了。
: ...................
--
FROM 114.242.203.*
应该是-c -O2 --ffunction-sections 没别的了
【 在 feiy 的大作中提到: 】
: 你的gcc选项和语句麻烦贴下,谢谢。
--
FROM 36.110.88.*