android dlopen(“xxxx”)失败:dlopen失败:未找到库“xxxx”

gg0vcinb  于 2023-05-12  发布在  Android
关注(0)|答案(3)|浏览(243)
package com.test.nativeapp;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends ActionBarActivity {

    static {
        try {
            System.load("native/libkdu_jni.so");
        } catch (UnsatisfiedLinkError e) {
          System.err.println("Native code library failed to load.\n" + e);
          System.exit(1);
        }
      }

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

LogCat错误:
2018 - 06-18 11:13:55.235:D/dalvikvm(17658):尝试加载lib native/libkdu_jni.so 0x 421 eeb 38 06-18 11:13:55.235:E/dalvikvm(17658):dlopen(“native/libkdu_jni.so”)失败:dlopen失败:未找到库“native/libkdu_jni.so”
2018 - 06-18 11:13:55.235:W/System.err(17658):本机代码库加载失败。
2018 - 06-18 11:13:55.235:W/System.err(17658):java.lang.UnsatisfiedLinkError:dlopen失败:未找到库“native/libkdu_jni.so”
我应该把这个文件夹放在哪里?

slsn1g29

slsn1g291#

试试这个:

System.loadLibrary("kdu_jni");

loadLibrary()实际上是从ape的lib/加载的。另外,你不需要指定'lib'和扩展名'so'。
希望这能帮上忙。

k3bvogb1

k3bvogb12#

我有同样的问题与其他.所以文件.我将jniLibs库添加到...src/main中的相关文件中,它工作了。也许你可以试试。

6jygbczu

6jygbczu3#

使用System.load("…");,您正在以一种无法被构建系统的Android APK打包代码检测的方式加载库。因此,该库不包含在APK中,并且在运行时,当您在Android设备上启动应用程序时无法找到。
要解决这个问题,请使用构建系统的机制,让APK打包器知道要包含的额外库。这将在构建系统之间有所不同。例如,在CMake构建系统中,您只需将库添加到target_link_libraries(…)中的库列表中:

add_executable(my_executable_name ${SRCS} ${RESOURCES})

# Link all required libraries with the executable, 
# and include them into the Android APK.
target_link_libraries(my_executable_name
    # Name libraries here as you would when calling "g++ -l…".
    # Alternatively, use absolute paths.
    Qt5::Core
    Qt5::Quick
    /my/path/to/native/libkdu_jni.so
)

相关问题