Android mupdf java.lang.UnsatisfiedLinkError:dlopen失败:找不到符号“atof”

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

java.lang.UnsatisfiedLinkError:dlopen失败:找不到“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:FATAL EXCEPTION:main流程:com.androidnewbee.www.shatayushiapp,PID:7115 java.lang.UnsatisfiedLinkError:dlopen失败:不能在com.artifex的java.lang.System.loadLibrary(System.java:526)的java.lang.Runtime.loadLibrary(Runtime.java:364)中找到“libmupdf_java.so”引用的符号“atof”。 mupdfdemo.MuPDFCore。(MuPDFCore.java:15)位于android.app的android.app.Activity.performCreate(Activity.java:5301)的com.androidnewbee.www.shatayushiapp.MainActivity.onCreate(MainActivity.java:23)。 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.Handler.dispatchMessage(Handler.java:102)的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1244) 位于java.lang.reflect的java.lang.reflect.Method.invokeNative(Native Method)的android.app.ActivityThread.main(ActivityThread.java:5433)中的ndroid.os.Looper.loop(Looper.java:136)。 Com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)中的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1268)中的Method.invoke(Method.java:515) at dalvik.system.NativeStart.main(Native Method)

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

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

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

 APP_PLATFORM := android-9 

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

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