【问题标题】:Android mupdf java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "atof"Android mupdf java.lang.UnsatisfiedLinkError:dlopen 失败:找不到符号“atof”
【发布时间】:2016-11-15 13:00:25
【问题描述】:

我正在使用 mupdf 在我的 android 应用程序中打开一个 pdf 文件。应用程序因此错误而崩溃。

java.lang.UnsatisfiedLinkError: dlopen failed: 找不到符号 “libmupdf_java.so”引用的“atof”...

这是我查看 pdf 文件的 java 代码。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RelativeLayout layout = (RelativeLayout) findViewById(R.id.main_layout);

        MuPDFCore core = null;
        try {
            core = new MuPDFCore(this,"/storage/emulated/0/Download/Metamorphosis-jackson.pdf");
        } catch (Exception e) {
            e.printStackTrace();
        }
        MuPDFReaderView reader = new MuPDFReaderView(this);
        reader.setAdapter(new MuPDFPageAdapter(this, new FilePicker.FilePickerSupport() {
            @Override
            public void performPickFor(FilePicker filePicker) {

            }
        }, core ));
        layout.addView(reader);
    }
}

代码在这一行崩溃。

  core = new MuPDFCore(this,"/storage/emulated/0/Download/Metamorphosis-jackson.pdf");

这是错误日志:-

07-13 10:40:34.299 7115-7115/com.androidnewbee.www.shatayushiapp E/AndroidRuntime:致命异常:主要 进程:com.androidnewbee.www.shatayushiapp,PID:7115 java.lang.UnsatisfiedLinkError:dlopen 失败:找不到符号 “libmupdf_java.so”引用的“atof”... 在 java.lang.Runtime.loadLibrary(Runtime.java:364) 在 java.lang.System.loadLibrary(System.java:526) 在 com.artifex.mupdfdemo.MuPDFCore.(MuPDFCore.java:15) 在 com.androidnewbee.www.shatayushiapp.MainActivity.onCreate(MainActivity.java:23) 在 android.app.Activity.performCreate(Activity.java:5301) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2291) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2378) 在 android.app.ActivityThread.access$800(ActivityThread.java:155) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5433) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 在 dalvik.system.NativeStart.main(Native Method)

我还想知道如何在列表中显示所有 pdf 文件,并允许用户从文件中选择以使用 mupdf 查看。 我是编程新手,欢迎任何帮助或建议。

【问题讨论】:

  • 你用的是棒棒糖版吗?
  • 不,我正在使用 KitKat。

标签: java android pdf fatal-error mupdf


【解决方案1】:

Google 已将一些 C 标准库函数(如 atof())从头文件中的内联函数移至普通函数。最新的 NDK 将默认构建一个 .so,它仅与最新的 Android 设备兼容,这些设备在设备的标准 C 库 (libc.so) 中具有 atof() 函数。这意味着,如果您在具有旧版本 C 库的旧设备上运行库,加载 dll 时会出错,因为预期的 atof() 函数不存在。

您是否尝试在 Application.mk 中进行设置:

APP_PLATFORM := android-9

这将导致 ndk 编译器构建与旧 Android 版本兼容的代码。

您也可以尝试将您的 NDK 安装降级到版本 10b(此版本早于 atof 从内联移动到部分 libc 的更改,因此完全避免了该问题)。

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2017-02-19
    • 2015-04-27
    • 2015-04-28
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多