相关疑难解决方法(0)

如何处理静态链接库之间的符号冲突?

编写库时,最重要的规则和最佳实践之一是将库的所有符号放入特定于库的命名空间.由于namespace关键字,C++使这很容易.在C中,通常的方法是在标识符前面加上一些特定于库的前缀.

C标准的规则放在那些一些限制(安全编译):AC编译器可以看只是一个标识符的前8个字符,所以foobar2k_eggsfoobar2k_spam可能被解释为有效相同标识符-但是每一个现代的编译器允许任意长标识符所以在我们这个时代(21世纪),我们不应该为此烦恼.

但是如果你面对一些你无法改变符号名称/标识符的库呢?也许你只有一个静态二进制文件和标题或者不想要,或者不允许自己调整和重新编译.

c static symbols collision libraries

79
推荐指数
2
解决办法
3万
查看次数

如何在Cocoa触摸框架中解决符号名称冲突

我开发了一个Cocoa触摸框架,并且遇到了嵌入其中的第三方静态框架类的问题.

当消费者项目使用我的框架并导入我的框架使用的第三方静态框架时,问题是符号冲突.

我最终想要从我的框架中删除这些类,因为它们与宿主项目类冲突(它们使用相同的第三方框架)并以某种方式告诉我的框架依赖于主项目第三方框架(我将指示开发人员导入框架),或者我会为这些类添加一个前缀,以便在托管项目时嵌入我的框架并使用与我自己的框架相同的第三方框架,它将不会产生符号冲突

任何帮助或指示都将受到欢迎!

cocoa-touch ios swift

14
推荐指数
2
解决办法
2989
查看次数

在构建时更改子例程名称以避免Xcode中的冲突

背景

我建立一个iOS应用程序(这我就打电话MyApp从这里开始),这将依赖于由几个独立的静态库进行计算(我称之为Lib1,Lib2,Lib3,...).每个库建在它自己的项目,然后导入到一个工作区(这样的工作区将包含MyApp,Lib1,Lib2,...).有关如何设置此处的更多详细信息.这些库由其他独立的产品使用MyApp,因此我希望尽量减少库中的任何更改.这些库也是用(plain)编写的C,因此没有头文件.

某些功能名称由多个存储库中使用(因此两者Lib1Lib2可能各自具有DoStuff方法).具有相同名称的功能大致做同样的事情,但对于如何是做到这一点,可以是磁带库之间不同的一些具体的,所以在实际的代码DoStuffLib1可能比代码完全不同DoStuffLib2.编写一个DoStuff在每个库中完全相同的通用将是非常困难的.

问题

当应用程序正在运行时,它没有DoStuff从正确的库中调用正确的.我发现了这一点,因为在调试会话期间调用了错误的函数(由于DoStuff函数的细微差别,最终导致应用程序崩溃).

我在寻找什么

每个库只有一个入口点MyApp,每个入口点都有唯一的名称.如果DoStuff从入口点方法Lib1(或任何其他方法Lib1)调用,那么我希望它调用该DoStuff方法Lib1.实现这一目标的最佳方法是什么?

有没有办法(可能通过XCode中的某个设置)我可以这样做,以便每个库都是它自己的命名空间?这将是我解决问题的首选方法.我想我可以通过并重命名重复的函数,以便它们都是唯一的(因此DoStuff方法Lib1可以重命名为Lib1DoStuff或类似的东西),但有数百个函数可能有重复的名称,我们将是将数百个库添加到项目中,因此必须手动重命名所有函数并修复对它们的所有调用将花费大量时间,而我的老板并不认为这是一个可行的选择.


UPDATE

在查看了Josh Caswell的评论以及他提供的一些链接后,看起来可能会在编译库时自动重命名所有函数,这将是尝试修复THE ISSUE上述内容的最佳方法.从我所看到的,objcopy在评论中的几个链接中提到的内容不支持iOS.我终于碰上了这个博客条目,其中谈到创建自定义生成Xcode的目标规则,这个博客,谈到了自定义生成设置和构建阶段.

我是否正确地假设我可以在构建过程中的某个时刻使用脚本自动附加到我的每个库中的所有函数的名称,而不是像我在上一WHAT …

xcode objective-c static-libraries collision ios

5
推荐指数
1
解决办法
304
查看次数