如何从目标文件中去除符号,然后打包成 .a 文件

3
我正在尝试去除符号,以便我们可以将代码分发给外部开发人员而不泄露我们的功能。我们正在隐藏符号,以便在发出nm命令时,符号不可见。想法是提供一个静态库,其中所有符号都被隐藏,除了极少数的符号。我能够创建一个带有所有符号剥离的共享库。但我无法为静态库获得它。我尝试按照下面的链接进行操作,但没有成功, 使用Xcode/gcc构建的静态库中隐藏符号 我有两个文件file1.c和file2.c,file1.c调用file2.c中的函数。我想在file2.c中隐藏一些符号。如果我使用ld -r选项,则仍然可以在使用nm命令时看到符号。我已经尝试在要隐藏的函数之前使用attribute((visibility("hidden")))。请问有谁能告诉我获取一个.o文件的确切步骤,该文件将剥离符号但具有内部链接?

2
你知道公共接口的符号必须保持完整,对吗? - Jonathon Reinhart
解释之前的评论:库对象之间使用的符号必须保持可见,否则在链接时无法解析。如果您坚持要隐藏,可以将所有库源放在一个翻译单元中(并仅提供对象),或提供动态链接库。 - fork0
你正在计划的事情会让调试变成噩梦,很高兴我不必使用或支持它! - Rob11311
3
不要因为你在哲学上反对他所尝试的事情而对一个问题进行贬低评价。想要保护二进制文件中的知识产权免受逆向工程的侵害是完全合理的。 - Eric
1个回答

3

"nm" 命令可以展示符号表,您可以使用 "strip" 命令去除符号表... 请查看 "strip" 命令的 man 手册...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接