【问题标题】:Apple Mach-O Linker error, duplicate symbol note: there is no '.m' file importedApple Mach-O 链接器错误,重复符号注意:没有导入“.m”文件
【发布时间】:2014-06-02 20:32:44
【问题描述】:

我遇到了一个突然出现的奇怪错误问题(或者至少我不记得我为出现此问题所做的任何事情),错误列表如下所示:

重复的符号 _NSStringFromMargin 在: /Users/...-ehsqzpjjajyzdnevdhqhhsgeqhre/Build/Intermediates/ABC.build/Debug-iphonesimulator/ABC.build/Objects-normal/x86_64/CSFilterStrip.o /Users/...-ehsqzpjjajyzdnevdhqhhsgeqhre/Build/Intermediates/ABC.build/Debug-iphonesimulator/ABC.build/Objects-normal/x86_64/CSMainMenuVC.o

...

ld:架构 x86_64 的 6 个重复符号 clang:错误: 链接器命令失败,退出代码为 1(使用 -v 查看调用)

所有 6 个大约相同的 NSStringFromMargin 并且总是第一行指向 CSFilterStrip.o 位置,我无法弄清楚为什么会这样,下面是 Margin.h

//Margin.h
#ifndef ABC_Margin_h
#define ABC_Margin_h

struct Margin {
    int left;
    int top;
    int right;
    int bottom;
};
typedef struct Margin Margin;

CG_INLINE Margin
MarginMake(int left, int top, int right, int bottom)
{
    Margin margin;

    margin.left = left;
    margin.top = top;
    margin.right = right;
    margin.bottom = bottom;

    return margin;
}
NSString *NSStringFromMargin(Margin margin)
{
    return [NSString stringWithFormat:@"{%d,%d,%d,%d}",margin.left,margin.top,margin.right,margin.bottom];
}

#endif

在 CSFilterStrip.h 中,我正在导入 Margin.h,因为:

@property (nonatomic) Margin margin;

如果没有这个导入,我有:“接口类型不能静态分配”错误,我可以添加 * 但是为什么在使用 CGRect 之后不需要指针,之后我创建了 Margin 对象。

重申一下:我已经检查过,没有意外导入“*.m”。

更新 正如@Michael 诊断的那样,我将攻击方法从标题移到了为 Margin 设计的单独类别:NSString+MarginUtils,这解决了问题。

【问题讨论】:

    标签: ios xcode linker


    【解决方案1】:

    问题是您在头文件中定义了NSStringFromMargin。相反,你应该在你的头文件中声明它,然后在你的 .m 文件中定义它。

    .h 应该是:

    NSString *NSStringFromMargin(Margin margin);
    

    .m 应该是:

    NSString *NSStringFromMargin(Margin margin)
    {
        return [NSString stringWithFormat:@"{%d,%d,%d,%d}",margin.left,margin.top,margin.right,margin.bottom];
    }
    

    另见this answer to a similar question

    【讨论】:

    • 你能帮我吗?我创建了类似于 CGGeometry.h 的 Margin.h,我是否只使用 @implementation 创建 Margin.m?
    • 或者我只是将这个实用方法删除到某个类别中,例如NSString(MarginHelper) ?
    猜你喜欢
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2023-03-30
    相关资源
    最近更新 更多