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】:我通过替换 libpng
的 pngpriv.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 的主宰可可因 Apple Mach-O 链接器 (id) 错误而中断