iphone – 仅在构建simlator时复制符号

iphone – 仅在构建simlator时复制符号,第1张

概述在构建设备(ipad 3)时,我的构建工作找不到任何警告或错误,但在为iPad或iPhone模拟器构建时,我收到链接器错误,如下所示: duplicate symbol _CONSTANT_NAME in:/Users/me/libLibrary.a(FileName.o)/Users/me/libOtherLibrary.a(OtherFileName.o) 常量在头文件中定义如此 cons 在构建设备(ipad 3)时,我的构建工作找不到任何警告或错误,但在为iPad或iPhone模拟器构建时,我收到链接器错误,如下所示:

duplicate symbol _CONSTANT_name in:/Users/me/liblibrary.a(filename.o)/Users/me/libOtherlibrary.a(Otherfilename.o)

常量在头文件中定义如此

const int CONSTANT_name = 123;

我试过在#define标签中包装常量,如下所示:

#ifndef CONSTANTS_H#define CONSTANTS_Hconst int CONSTANT_name = 123;#endif

为什么这在构建设备时工作正常,但在构建模拟器时会出现问题?

解决方法 编译器正在告诉你完全正确的事情.您很幸运,直接在iPad上构建时不会发生这种情况.

在包含此标头的每个.m文件中,您将创建一个具有相同名称的新的不同变量.编译器可以在将所有这些文件链接到单个.a文件时解决此问题,但是当构建多个.a文件并将多个.a文件链接在一起时,编译器会编译重复的副本.

我会做三件事之一:

>将const int转换为#define. #define CONSTANT_name 123
>在const int之前添加static. static const int CONSTANT_name = 123;
>在const int之前添加extern并将实际的const int添加到单个.m中.在.h中,extern const int CONSTANT_name;.在单个.m中,const int CONSTANT_name = 123;.

对于最后一个,我将创建一个constants.m文件作为一个单独的位置来保存const int CONSTANT_name = 123;定义.

希望有所帮助.

总结

以上是内存溢出为你收集整理的iphone – 仅在构建simlator时复制符号全部内容,希望文章能够帮你解决iphone – 仅在构建simlator时复制符号所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1059035.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存