【问题标题】:Compiler option to globally changing symbol name?全局更改符号名称的编译器选项?
【发布时间】:2014-11-27 00:00:33
【问题描述】:

帮朋友问这个。

假设在我的 iOS 项目中,我获得了一个第三方静态库 (.a),我无法访问该库的源代码,并且它与一个开源项目静态链接。我也在使用这个开源项目静态库,但版本较新。因为它是 iOS,所以它们都需要静态链接。为了避免重复的符号,在编译过程中,我可以给 Clang 编译器(或者我个人也对 GCC 感兴趣)提供一个选项来全局修改这个较新版本的开源库(也许假设我将它编译为静态库首先)我要链接到?

换句话说,要链接到“.a”,有没有办法在编译时命名修饰符号,例如在它前面加上前缀,这样就不会发生符号冲突?如果编译器无法完成,是否有一个工具可以在全球范围内对其进行命名?

或者,感谢任何其他避免重复符号的解决方案。

【问题讨论】:

    标签: ios objective-c c clang


    【解决方案1】:

    两个想法:

    1) 在要编译的库上添加前缀要容易得多。这可能不太令人满意,但它是一个简单的解决方案。

    2) 我在谷歌上找到了这个:

    http://web.mit.edu/~jfc/src/sym-rename.c

    看起来它会为 ELF 符号表中的所有内容附加前缀。大概你会用 ar 分解你的档案,在上面运行它,然后重新组合它。

    【讨论】:

    • 对于 1),真的吗?可能有一堆私有函数、静态变量等。下次有新版本出现时……哎呀。 2)有趣,令人惊讶的是,代码也很短。不幸的是,iOS 二进制文件不在 ELF 中。
    猜你喜欢
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 2015-02-21
    相关资源
    最近更新 更多