Android mupdf java.lang.UnsatisfiedLinkError: ошибка dlopen: не удается найти символ atof

Я использую mupdf, чтобы открыть файл PDF в своем приложении для Android. Приложение вылетает с этой ошибкой.

java.lang.UnsatisfiedLinkError: ошибка dlopen: не удается найти символ "atof", на который ссылается "libmupdf_java.so"...

Это мой код Java для просмотра файла PDF.

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");

Это журнал ошибок: -

Также я хотел бы знать, как я могу отображать все файлы PDF в списке и позволять пользователю выбирать из файлов для просмотра с помощью mupdf. Я новичок в программировании, поэтому любая помощь или предложение приветствуются.

Google переместил некоторые функции стандартной библиотеки C, такие как atof(), из встроенных функций в файлах заголовков в обычные функции. Последние версии NDK по умолчанию создают файл .so, совместимый только с последними устройствами Android, имеющими функцию atof() в стандартной библиотеке C устройства (libc.so). Это означает, что если вы запустите библиотеку на более старом устройстве с более старой версией библиотеки C, вы получите сообщение об ошибке при загрузке dll, поскольку ожидаемая функция atof() не будет существовать.


person AndroidNewBee    schedule 13.07.2016    source источник
comment
Нет, я использую KitKat.   -  person Milind Vyas    schedule 13.07.2016
comment
07-13 10:40:34.299 7115-7115/com.androidnewbee.www.shatayushiapp E/AndroidRuntime: НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.androidnewbee.www.shatayushiapp, PID: 7115 java.lang.UnsatisfiedLinkError: ошибка dlopen: невозможно найдите символ "atof", на который ссылается "libmupdf_java.so"... в 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.Ma inActivity.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(ActivityThre ad.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(собственный метод) на 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(собственный метод)   -  person AndroidNewBee    schedule 13.07.2016


Ответы (1)


Вы пытались установить это в своем Application.mk:

Это приведет к тому, что компилятор ndk создаст код, совместимый со старыми версиями Android.

APP_PLATFORM := android-9

Вы также можете попробовать понизить версию NDK до версии 10b (эта версия предшествует изменению, когда atof был перемещен из встроенной в часть libc, поэтому проблема полностью устранена).

Вы используете леденец версии?

person JosephH    schedule 13.07.2016