Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 全局更改符号名称的编译器选项?_Ios_Objective C_C_Clang - Fatal编程技术网

Ios 全局更改符号名称的编译器选项?

Ios 全局更改符号名称的编译器选项?,ios,objective-c,c,clang,Ios,Objective C,C,Clang,为朋友问这个 假设在我的iOS项目中,我得到了一个第三方静态库(.a),我无法访问该库的源代码,并且该库与开源项目静态链接。我也在使用这个开源项目静态库,但是使用了一个更新的版本。因为它是iOS,所以它们都需要静态链接。为了避免重复符号,在编译过程中,我是否可以给Clang编译器(或者我个人也对GCC感兴趣)一个选项来全局破坏我要链接到的这个新版本的开源库(可能假设我先编译到一个静态库) 换句话说,要链接到“.a”,是否有一种方法可以在编译时命名并损坏符号,例如在符号前面加前缀,这样就不会发生符

为朋友问这个

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

换句话说,要链接到“.a”,是否有一种方法可以在编译时命名并损坏符号,例如在符号前面加前缀,这样就不会发生符号冲突?如果编译器无法做到这一点,是否有一种工具可以在全球范围内命名为mangle

或者,任何其他避免重复符号的解决方案都值得赞赏,谢谢。

两个想法:

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

2) 我在谷歌上发现:

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

1),真的吗?可能会有一堆私有函数、静态变量等,下一次更新版本出现时……哎哟。2) 有趣的是,代码也很短。不幸的是,iOS二进制文件不在ELF中。