【问题标题】:Linker error when try to call ObjC method from C尝试从 C 调用 ObjC 方法时出现链接器错误
【发布时间】:2015-07-31 15:50:34
【问题描述】:

实际上,我是一名 Unity 开发人员,我对 XCode 和 Objective C 一无所知。但我必须使用 ObjC 库进行一些集成并从 Unity 调用此函数。所以我将该库导入到创建的 XCode 项目并在 Unity 和 XCode 之间编写一些包装器代码。当我尝试调用空函数时,它对我有用。但是当我尝试在 C 文件中编写 ObjC 方法时,它会导致链接器错误,我不知道它有什么问题。所以,这是交易:

在 Unity MonoBehaviour.cs 中:

[DllImport("__Internal")]
public static extern void startWithAPIKey(string apiKey);
...
startWithAPIKey(apiKey);

在 XCode Wrapper.h 中:

@interface IOSYandexMetricaWrapper : NSObject
@end

在 XCode Wrapper.m 中:

#import "YandexMobileMetrica.h" //library header
#import "IOSYandexMetricaWrapper.h"

void startWithAPIKey(char *apiKey) {
    //method that i want to call
    [YMMYandexMetrica startWithAPIKey:(NSString *)apiKey];
}

所以它编译,但链接器说这样的话: Undefined symbols for architecture armv7: "_OBJC_CLASS_$_YMMYandexMetrica", referenced from: objc-class-ref in IOSYandexMetricaWrapper.o

有人可以帮我解决我的问题吗?

【问题讨论】:

    标签: c++ objective-c c xcode unity3d


    【解决方案1】:

    这有时可能是因为YMMYandexMetrica 未包含在您的目标中。

    要判断它是否包含在您的目标中,请在导航器中按YMMYandexMetrica.m 文件并打开实用程序侧栏。您应该会看到一个名为“Target Membership”的小节 - 项目名称旁边的复选框应该被勾选。

    关于这个问题的更多细节可以在这里:

    http://williamboles.me/_objc_class__-errors/

    (它对于 Xcode 4 有点过时,但我认为仍然与您的问题相关)

    【讨论】:

    • 感谢您的回复,但我必须使用 CocoaPods 并且目标库在其他项目中。这个项目构建了一些静态库,它已经包含在我的主项目的 Target Membership 中。所以它还没有帮助我。也许你会有一些其他的建议。提前谢谢。
    【解决方案2】:

    YMMYandexMetrica 添加到您的项目构建阶段设置:)

    【讨论】:

      猜你喜欢
      • 2013-04-26
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      相关资源
      最近更新 更多