我正在一个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) 我正在尝试创建一个包含各种第三者子框架的静态伞式框架。因此,我遵循了以下教程:
不幸的是,当将静态伞框架添加到另一个项目中时,我从子框架中收到各种“未定义符号”错误。
当我像下面的图片一样在“链接库的二进制文件”中再次链接子框架时,它确实起作用。但是,如何防止需要这样做呢?我只希望外部开发人员将我的Umbrella框架添加到他的项目中。
