建筑的未定义符号..在动态框架中
Posted
技术标签:
【中文标题】建筑的未定义符号..在动态框架中【英文标题】:Undefined symbols for architecture .. in dynamic framework 【发布时间】: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 进行验证时,它会尝试链接它,自然会因为没有实现而失败,并出现“未定义的架构符号”。 【参考方案1】:确保 Build settings Build active architecture only 中的 framework target = NO
如果你使用 cocoapod 来管理你的依赖 检查 pod 目标并将 Build active architecture only = NO
【讨论】:
尝试删除您的 .m 和 .h 然后再次复制:确保选择“将项目复制到目标组的文件夹(如果需要)”检查构建标题中的 .h 和 .m在 compile source 中双击 Header Search Paths 项,会出现一个弹窗。单击 + 按钮,然后输入以下内容:$SOURCE_ROOT/include 首先感谢您的回答!不幸的是,所有建议都没有奏效。还有其他想法吗?以上是关于建筑的未定义符号..在动态框架中的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB:mex-compile 上缺少框架 – 架构 x86_64 的未定义符号