库和项目中的类名相同

时间:2015-02-05 06:41:57

标签: ios objective-c static-libraries

如果我的主项目中有一个名为ClassA的类,并且我有一个为静态库构建的子项目,则在此子项目中还有一个名为ClassA的类。我想知道我可以成功构建和运行,编译器如何区分这两个类?

2 个答案:

答案 0 :(得分:2)

我认为你在谈论链接器是如何工作的。

静态库是几个可重定位目标文件的集合,后缀为" .o"。项目中的源文件也会编译为可重定位目标文件。

当链接器工作时,它将解析代码中使用的ClassA之类的符号。如果它发现在可重定位目标文件中 - 让我们说rof1.o,它会将rof1.o吸收到可执行文件中。链接器尝试解析符号时,可重定位目标文件的搜索顺序决定了使用哪个ClassA。由于搜索顺序对我们来说是不确定的,因此您应该使用不同的类名。

BTW如果将其他链接标志设置为' -all_load',这表示链接器将尝试将所有可重定位目标文件组合到可执行文件中。然后,如果有两个或多个相同的符号,它将显示错误"重复的符号"。

答案 1 :(得分:1)

您需要重命名其中一个类,否则编译器在构建代码时会抛出错误。