【问题标题】:Iphone - device - linker errorIphone - 设备 - 链接器错误
【发布时间】: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,与模拟器和设备相同(仅更改了编译目标)。我试图找到这个问题,但似乎没有人发布任何关于这个问题的信息。

【问题讨论】:

    标签: objective-c linker-errors 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 编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多