Iphone - 设备 - 链接器错误

Posted

技术标签:

【中文标题】Iphone - 设备 - 链接器错误【英文标题】:Iphone - device - linker error 【发布时间】:2013-10-06 00:12:59 【问题描述】:

我已将 libpng 添加到我的应用程序中。如果我为模拟器构建,一切都很好。当我为设备构建应用程序时,出现链接器错误:

    Undefined symbols for architecture armv7: "_png_init_filter_functions_neon", referenced from: _png_read_filter_row in libpng-arm7-release.a(pngrutil.o)

我已经从源代码手动构建 libpng,与模拟器和设备相同(仅更改了编译目标)。我试图找到这个问题,但似乎没有人发布任何关于这个问题的信息。

【问题讨论】:

【参考方案1】:

我通过替换 libpngpngpriv.h 中的第 117-121 行“解决了”这个问题:

#  ifdef __ARM_NEON__
#     define PNG_ARM_NEON_OPT 2
#  else
#     define PNG_ARM_NEON_OPT 0
#  endif

通过

#define PNG_ARM_NEON_OPT 0

这会禁用 ARM 的 NEON 优化,这似乎是问题的原因。

不过,这只是一种解决方法,我没有时间进一步调查问题的真正原因。

【讨论】:

你需要从arm文件夹编译*.c文件。 您也可以只使用预处理器标志“PNG_ARM_NEON_OPT=0”进行编译,这样您就不必修改 libpng 源代码 修改.h后是否需要编译*.c,如何编译? 我在 3.1.0 版本中也遇到了同样的问题。我正在尝试查找文件位置。请提供指南以找到该文件的路径。 @HariKrishnan.P 不太清楚你在说什么,因为没有 3.1.0 版的 libpng。【参考方案2】:

添加到 Psyton 的评论中,这是我们解决它的方法。 编译arm/*.c 文件。但是,这仅适用于 android。对于 ios,我们还必须使用以下条目创建一个新的 pnglibconf.h

#undef PNG_ARM_NEON_API_SUPPORTED
#undef PNG_ARM_NEON_CHECK_SUPPORTED
#define PNG_ARM_NEON_OPT 0

查看 libpng 中的 ARM 定义,目前它们似乎有点错误,因为PNG_ARM_NEON_API_SUPPORTED 应该足以关闭 NEON 编译。

【讨论】:

以上是关于Iphone - 设备 - 链接器错误的主要内容,如果未能解决你的问题,请参考以下文章

Siphon 为 iOS 模拟器构建,但在设备构建时出现链接器错误

iPhone上的Facebook登录导致“lang:错误:链接器命令失败”

iPhone上的SQLite,奇怪的链接错误

iphone 的主宰可可因 Apple Mach-O 链接器 (id) 错误而中断

应用程序在设备上显示 facebook SDK 的链接器错误

Xcode 5 项目在模拟器 3.5 上运行,但在设备上出现链接器错误