Iphone - 设备 - 链接器错误

时间:2013-09-30 07:49:26

标签: objective-c linker-errors libpng

我已将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,对于模拟器和设备也是如此(只有更改了编译目标)。我试图找到这个问题,但似乎没有人发布关于这个问题的任何内容。

2 个答案:

答案 0 :(得分:8)

我"解决了#34;通过替换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优化,这似乎是问题的原因。

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

答案 1 :(得分:0)

添加到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

看看ARM在libpng中的定义,看起来它们当前有点儿错误,因为PNG_ARM_NEON_API_SUPPORTED应该足以关闭NEON编译。