【发布时间】:2016-02-11 14:40:23
【问题描述】:
我正在开发一个 iOS 框架,该框架包含多个第三方框架并使用 UnitySendMessage C 方法与 Unity 进行通信。
我想创建一个动态框架(支持 iOS8+),但我偶然发现了以下编译错误:
Undefined symbols for architecture arm64:
"_UnitySendMessage", referenced from:
....
ld: symbol(s) not found for architecture arm64
此方法在我的 .m 类中调用,并在我的 .h 文件中声明如下:
void UnitySendMessage(const char* obj, const char* method, const char* msg);
当编译为静态库时,它可以编译并且工作正常,但我在嵌入式 3rd 方框架上遇到其他崩溃。由于我无法控制这些框架,我更喜欢创建一个动态框架。
我已经根据我能找到的所有其他帖子尝试了许多编译器设置,但由于嵌入式框架,我需要支持多种架构。这些设置都不适合我。
我还尝试创建另一个静态框架并将其嵌入到我的“父”动态框架中。我用 lipo 进行了检查,似乎添加了架构,但我仍然得到相同的未定义符号错误。
我已经为此工作了 2 天,所以我真的希望有人能指出我正确的方向
更新
添加标志“-undefined dynamic_lookup”解决了编译问题。但是,在统一项目中添加动态框架时,当触发“UnitySendMessage”方法时,它会崩溃。
dyld`dyld_fatal_error:
*创建静态框架时,该方法不会崩溃并且可以正常工作。仍然不明白这种情况下与动态框架有什么区别。
该方法在我的 .h 文件中声明如下:
#ifdef __cplusplus
extern "C" {
void UnitySendMessage(const char* obj, const char* method, const char* msg);
}
#endif
【问题讨论】:
-
您解决了这个问题吗?我在这里也有类似的问题。静态有效,动态抛出链接器错误...
-
@martijn 我知道大约 2 年前有人问过这个问题,但你解决了这个问题吗?
-
你解决了这个问题吗,我从过去 3 天开始面临这个问题,无法解决。
-
我有几乎同样的问题。我已经用 UnitySendMessage 方法构建了静态库,这很好。在此之后,我想为这个库创建 podspec,当 podspec 使用 pos spec lint 进行验证时,它会尝试链接它,自然会因为没有实现而失败,并出现“未定义的架构符号”。
标签: ios objective-c dynamic compiler-errors frameworks