2016-07-13 11 views
0

mupdfを使用して自分のandroid app.Theアプリでpdfファイルを開くときにこのエラーでクラッシュします。Android mupdf java.lang.UnsatisfiedLinkError:dlopen failed:シンボル "atof"を見つけることができません

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "atof" referenced by "libmupdf_java.so"...

これは、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: FATAL EXCEPTION: main Process: com.androidnewbee.www.shatayushiapp, PID: 7115 java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "atof" referenced by "libmupdf_java.so"... at java.lang.Runtime.loadLibrary(Runtime.java:364) at java.lang.System.loadLibrary(System.java:526) at com.artifex.mupdfdemo.MuPDFCore.(MuPDFCore.java:15) at com.androidnewbee.www.shatayushiapp.MainActivity.onCreate(MainActivity.java:23) at android.app.Activity.performCreate(Activity.java:5301) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2291) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2378) at android.app.ActivityThread.access$800(ActivityThread.java:155) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5433) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) at dalvik.system.NativeStart.main(Native Method)

また、私は、私は、リスト内のすべてのPDFファイルを表示し、ユーザーが使用して表示するファイルを選択できるようにすることができます方法を知っていただきたいと思いますmupdf。 私はプログラミングに慣れていないので、助けや提案は大歓迎です。

+0

ロリポップバージョンを使用していますか? –

+0

いいえ私はKitKatを使用しています。 – AndroidNewBee

答えて

3

Googleは、atof()などのC標準ライブラリ関数の一部を、ヘッダーファイルのインライン関数から通常関数に移動しました。最新のNDKはデフォルトで、デバイスの標準Cライブラリ(libc.so)にatof()機能を持つ最新のAndroidデバイスとのみ互換性のある.soを構築します。つまり、古いバージョンのCライブラリを持つ古いデバイスでライブラリを実行すると、期待されるatof()関数が存在しないため、dllを読み込む際にエラーが発生します。

APP_PLATFORM := android-9 

この

はNDKコンパイラが古いAndroidのバージョンと互換性のあるコードをビルドするようになります:

はあなたApplication.mkでこれを設定しようとしています。

NDKのインストールをバージョン10bにダウングレードすることもできます(このバージョンは、atofがインラインからlibcの一部に移動したため、問題は完全に回避されます)。

関連する問題