8

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

4

2 回答 2

10

我通过替换libpng's中的第 117-121 行来“解决”这个问题pngpriv.h

#  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 优化,这似乎是问题的原因。

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

于 2013-10-03T07:34:17.433 回答
1

添加到 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 编译。

于 2014-08-28T11:39:47.393 回答