【发布时间】:2013-06-07 06:36:36
【问题描述】:
我正在尝试剥离符号,以便我们可以将代码分发给外部开发人员,而不会泄露我们的功能。我们正在隐藏我们的符号,因此当我们发出 nm 命令时,这些符号是不可见的。这个想法是提供一个静态库,除了极少数符号之外,所有符号都被隐藏了。我能够创建一个删除所有符号的共享库。但我无法为静态库获取它。我尝试了以下链接,但没有成功,
Symbol hiding in static libraries built with Xcode/gcc
我有两个文件 file1.c 和 file2.c,file1.c 对 file2.c 进行了函数调用。我想隐藏 file2.c 中的一些符号。如果我使用 ld -r 选项,当我使用 nm 命令时,我仍然能够看到这些符号。我尝试在要隐藏的函数之前使用 attribute((visibility("hidden"))) 。谁能告诉我获取 .o 文件的确切步骤,该文件将去除符号但内部链接。
【问题讨论】:
-
您知道公共接口的符号必须保持不变,对吗?
-
解释前面的评论:库对象之间使用的符号必须保持可见,否则在链接时无法解析。如果您坚持隐藏,您可以将所有库源放在一个翻译单元中(并仅交付对象)或交付动态链接库。
-
你的计划,会让调试成为一场噩梦,很高兴我不必使用或支持它!
-
不要仅仅因为你在哲学上反对他试图做的事情就对一个问题投反对票。保护二进制文件中的知识产权免遭逆向工程是完全合理的。