gpt4 book ai didi

iphone - 不要在自己的静态库中公开已用库中的符号

转载 作者:太空狗 更新时间:2023-10-30 03:19:09 24 4
gpt4 key购买 nike

我正在按照提供的说明为 iPhone 编写一个可重用的静态库 here .

我想在我的库内部使用 minizip,但不想将它暴露给用户。

用户应该可以自己包含 minizip,可能是不同的版本,并且不会与我的“内部”minizip 版本发生冲突。

这可能吗?

编辑:

我尝试将 -fvisibility=hidden 添加到 minizip 文件的附加编译器标志中,并将函数更改为 __private_extern____attribute__((visibility("hidden "))),但它似乎仍会生成已定义的外部符号:

00000918 T _unzOpen
0000058e T _unzOpen2
00001d06 T _unzOpenCurrentFile
00001d6b T _unzOpenCurrentFile2
...

编辑#2:

显然,标有这些注释的符号仅由链接器设为私有(private),这在 Xcode 构建源代码时永远不会发生,因为它添加了 -c 参数(“编译或汇编源文件,但不链接。”)

最佳答案

您可以使用 objcopy 重命名从 minizip 导出的所有符号。

有点像

objcopy -redefine-sym=minizip.syms yourstaticlibray.a 

minizip.syms

_unzOpen     _yourownprefix_unzOpen
_unzOpen2 _yourownprefix_unzOpen2
... ...

如果可执行文件与另一个 minizip.ayourstaticlibray.a 链接,则不会发生冲突,因为您重命名了 yourstaticlibray.a< 中的所有符号 你在 yourstaticlibray.a 中对 minizip 的调用将使用前缀符号,而不是 unzOpen 符号。

关于iphone - 不要在自己的静态库中公开已用库中的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1601900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com