이 내 시나리오 :로드 오류가 기존 공유 라이브러리 (.so를)
-) 나는 NDK 빌드에 의해 생성 libpsp.so라는 공유 라이브러리를 가지고있다. 이 lib는 약 30 개의 .c 파일을 사용하여 생성되었습니다.
Android.mk 사용 :
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Here we give our module name and source file(s)
LOCAL_MODULE := psp
LOCAL_SRC_FILES := (My .c files)
include $(BUILD_SHARED_LIBRARY)
-) NDK 빌드가 자동으로 armeabi/디렉터리/libs가에
을 libpsp.so을 넣어 -) 내 자바 코드에 내가 가진 :
private native int calculateCoefficient(double w, double v_st_e_prev, double c_l);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
**//Loads successfully
System.loadLibrary("psp");**
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
TextView lv = (TextView)findViewById(R.id.textView);
**//Returns an error: unsatisfiedlinkerror native method not found
lv.setText(Integer.toString(calculateCoefficient(1,1,1)));**
}
-) 공유 라이브러리를 빌드하는 데 사용되는 .c 파일 중 하나는 서명이있는 calculateCefficient 메소드를 가지고 있습니다.
sint32_t calculateCoefficient(double_t w, double_t v_st_e_prev, double_t *c_l);
calculateCoefficient 메소드가 .so 라이브러리에있는 경우 Android에서 찾을 수없는 이유는 무엇입니까? 방금 NDK로 일하기 시작 했으니 까 무엇인가를 놓친다면 미안하지만, 조사를 해본 결과 나는 이것에 대한 답을 찾을 수 없습니다.
UPDATE1 : 실제 코드에 액세스 할 수 없으며 라이브러리가 다른 사람에 의해 생성되었습니다. 서명이있는 .h 파일 만 있습니다. 그래서 라이브러리를 만드는 데 사용 된 .c 파일을 편집 할 수 없습니다.
먼저, -d 플래그와 함께 ndk objdump를 사용하여 .so를 분해하고 함수 이름을 grep하여 실제 존재하는 것을 찾습니다. 다음으로 암시 적으로 뿌리 박은 에뮬레이터의 adb 쉘을 사용하거나 장치에서 디버그 빌드가있는 run-as 도구를 사용하여 설치를 검사하고 실제로 압축이 풀린 내용을 확인하십시오. –