动态框架中未定义的体系结构符号

mar*_*ijn 6 frameworks compiler-errors dynamic objective-c ios

我正在一个iOS框架上工作,该框架包含几个第三方框架,并使用UnitySendMessage C方法与Unity进行通信。

我想创建一个动态框架(支持iOS8 +),但偶然发现以下编译错误:

Undefined symbols for architecture arm64:
   "_UnitySendMessage", referenced from:
 ....
ld: symbol(s) not found for architecture arm64
Run Code Online (Sandbox Code Playgroud)

此方法在.m类中调用,并在.h文件中如下所示声明:

void UnitySendMessage(const char* obj, const char* method, const char* msg);
Run Code Online (Sandbox Code Playgroud)

当作为静态库进行编译时,它可以编译并正常工作,但是在嵌入式第三方框架上出现了其他崩溃。因为我无法控制这些框架,所以我更喜欢创建一个动态框架。

我已经根据我可以找到的所有其他帖子尝试了许多编译器设置,但是由于嵌入式框架的原因,我需要支持多种体系结构。没有一个设置对我有用。

我也尝试创建另一个静态框架,并将其嵌入到我的“父”动态框架中。我用lipo检查了一下,似乎添加了体系结构,但是我仍然遇到相同的未定义符号错误。

我已经为此工作了两天,所以我真的希望有人可以指出正确的方向

更新

添加标志“ -undefined dynamic_lookup”解决了编译问题。但是,在将动态框架添加到统一项目中时,触发“ UnitySendMessage”方法时,它会崩溃。

dyld`dyld_fatal_error:
Run Code Online (Sandbox Code Playgroud)

*创建静态框架时,该方法不会崩溃并且可以正常工作。仍然不了解在这种情况下使用动态框架有什么区别。

该方法在我的.h文件中声明如下:

#ifdef __cplusplus
extern "C" {
    void UnitySendMessage(const char* obj, const char* method, const char* msg);
}
#endif
Run Code Online (Sandbox Code Playgroud)

小智 -1

确保构建设置中的框架目标仅构建活动架构 = 否

如果您使用cocoapod来管理依赖项,请检查 pod 目标并将“仅构建活动架构”设置为“否”