gpt4 book ai didi

iphone - 仅在为模拟器构建时复制符号

转载 作者:可可西里 更新时间:2023-11-01 03:28:10 25 4
gpt4 key购买 nike

在为设备 (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_H

const int CONSTANT_NAME = 123;

#endif

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

最佳答案

编译器告诉你正确的事情。你很幸运,直接构建到你的 iPad 时没有发生这种情况。

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

我会做以下三件事之一:

  1. const int 转换为 #define#define CONSTANT_NAME 123
  2. const int 之前添加 static。 static const int CONSTANT_NAME = 123;
  3. 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 - 仅在为模拟器构建时复制符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12264997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com