【发布时间】:2014-05-15 12:57:11
【问题描述】:
我在存档文件中有一个 C 库,clib.a。我为它编写了一个 C++ 包装器cpp.o,并希望将其用作静态库:
ar cTrvs cppwrap.a clib.a cpp.o
除非包含正确的标头,否则链接到此的代码将无法直接使用来自clib.a 的内容。但是,如果有人巧合地创建了一个合适的原型——例如void myCoincidentallyNamedGlobalFunction() -- 我担心myCoincidentallyNamedGlobalFunction 的 定义将适用。
由于来自clib.a 的符号只需要在cpp.o 中访问,而不是与cppwrap.a 相关的任何东西,有没有办法完全隐藏它们,以免发生冲突(所以即使包括clib标头会失败)?
【问题讨论】:
-
clib.o是您自己构建的东西,还是您想要包装的由其他人提供的整体二进制文件? -
@Jeff 我正在构建它,是的。
-
所以你有几个选择,我想。你可以隐藏你不想在匿名命名空间中导出的方法/变量,这可能是最干净的方式,或者你可以手动
strip -N或objcopy -N符号你不想从最终的分布式库中公开。跨度> -
好吧,这可能是愚蠢的,但他可以把 clib.o 放在它自己的库中,清理名称,然后将其归档到 cppwrap.a 中吗?
-
好吧,也许不是完全愚蠢,因为 Jeff 也这么认为。我虽然符号剥离主要应用于调试....
标签: c++ c gcc static-linking unix-ar