【发布时间】:2017-12-19 06:14:00
【问题描述】:
我想发送libfoo.a,它由foo.o组成--这又取决于libVendorBar.a和libVendorZoo.a。
当我链接并生成我的libfoo.a 时,我注意到libVendor*.a 中的符号仍然是公开的,并且可供潜在的客户端应用程序链接到。
由于我无法控制的许多原因,我绝对不希望第 3 方客户端能够直接链接到供应商库。
如何强制 gcc 解析 libfoo 的所有 libVendor 符号并丢弃它们,以便只有 libfoo 中的符号可见?
我目前没有使用任何LD_FLAGS,所有内容都是静态链接的。
【问题讨论】:
-
你看过这个linux.die.net/man/1/strip 吗?
-
strip即使使用-K也无法满足我的要求。它似乎从静态库中丢弃了称为存档索引的东西。 If I regenerate the index viaranlib,链接的二进制文件超级很奇怪,每条“分支和链接”指令都会跳转到自身并创建一个无限循环。我花了半天时间调试strip和ranlib的后果,然后才意识到我做错了什么。gcc中肯定有什么东西可以做我想做的事吗? -
根据stackoverflow.com/questions/33851045/…,我正在寻找的是
-static标志,它可以完全解析所有符号。我希望这也意味着 gcc 将足够聪明,可以丢弃大部分符号。如果成功了,我想我明天会更新这篇文章。