如何为 android 构建 mupdf

Posted

技术标签:

【中文标题】如何为 android 构建 mupdf【英文标题】:How to build mupdf for android 【发布时间】:2017-02-06 10:57:32 【问题描述】:
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/j2k.c:5977: error: undefined reference to 'opj_has_thread_support'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/j2k.c:5980: error: undefined reference to 'opj_get_num_cpus'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/j2k.c:5957: error: undefined reference to 'opj_has_thread_support'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/j2k.c:5959: error: undefined reference to 'opj_thread_pool_destroy'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/j2k.c:5962: error: undefined reference to 'opj_thread_pool_create'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/j2k.c:5966: error: undefined reference to 'opj_thread_pool_create'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/j2k.c:7618: error: undefined reference to 'opj_thread_pool_destroy'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/j2k.c:6021: error: undefined reference to 'opj_thread_pool_create'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/j2k.c:6024: error: undefined reference to 'opj_thread_pool_create'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/tcd.c:1606: error: undefined reference to 'opj_thread_pool_wait_completion'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/dwt.c:647: error: undefined reference to 'opj_thread_pool_get_thread_count'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/dwt.c:706: error: undefined reference to 'opj_thread_pool_wait_completion'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/dwt.c:724: error: undefined reference to 'opj_thread_pool_wait_completion'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/dwt.c:729: error: undefined reference to 'opj_thread_pool_submit_job'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/dwt.c:731: error: undefined reference to 'opj_thread_pool_wait_completion'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/dwt.c:793: error: undefined reference to 'opj_thread_pool_submit_job'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/t1.c:1656: error: undefined reference to 'opj_tls_get'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/t1.c:1660: error: undefined reference to 'opj_tls_set'
jni/../../../../thirdparty/openjpeg/src/lib/openjp2/t1.c:1772: error: undefined reference to 'opj_thread_pool_submit_job'
collect2: error: ld returned 1 exit status

使用 ndk-build 64 位编译时,我在 Windows 和 ubuntu 上都尝试过,但在两台机器上仍然出现相同的错误,我无法理解为什么会出现此错误。

遵循这个官方步骤

http://mupdf.com/docs/how-to-build-mupdf-for-android

【问题讨论】:

【参考方案1】:

更改 APP_PLATFORM 解决了我的问题。

我使用this 教程为 android 构建 mupdf

确保您在 platform/android/viewer/jni/Application.mk

中有以下内容

适用于 android 5 之前的版本。* APP_PLATFORM=android-9

适用于 android 版本 5.* 及之后

APP_PLATFORM=android-16
APP_ABI := armeabi-v7a

CFLAGS += -fvisibility=default -fPIE
LDFLAGS += -rdynamic -fPIE -pie

这将解决您的问题

【讨论】:

【参考方案2】:

更新

你可以使用我编译的库:

https://github.com/itzharDev/MuPDF

如果你想自己编译,尝试使用Docker编译源码


我构建了 linux docker 镜像来编译 MuPDF 源,我希望尽快发布这个镜像

【讨论】:

干得好,但你只支持 armeabi armeabi-v7a mips 你能支持其余的 ABI

以上是关于如何为 android 构建 mupdf的主要内容,如果未能解决你的问题,请参考以下文章

如何为 android 构建 boost::locale

如何为 Android 构建和简化 Java 代码

如何为Android NDK的gradle构建文件中指定NDK

Firebase Cloud Messaging to Android 工作,但 iOS 失败。如何为 iOS 构建有效负载?

android studio,如何为发布版本制作签名的 apk(使用 KTS 构建文件的 gradle)

如何为 Android 动态壁纸创建设置活动