System.loadLibrary("my_shared_lib");
을 사용하여 원시 라이브러리를로드하는 데 문제가 있습니다.이 호출은 결코 반환되지 않습니다. 내 프로젝트에서System.loadLibrary 호출을 사용하여 공유 라이브러리를로드하지 않습니다.
내가 여러 정적 라이브러리는 NKD-빌드 스크립트를 사용하여 구축이 : 여기
는 상황이다. 를 구축 잘 내가 필요로하는 각
.a
LIB이 Android.mk
을 사용하여 작동 : **Android.mk used for static libs**
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := my_static_lib_1
# Include paths
LOCAL_C_INCLUDES := \
$(PATH_TO_INCLUDES1) \
$(PATH_TO_INCLUDES2)
# Sources
LOCAL_SRC_FILES := \
my_source_1.cpp\
my_source_11.cpp
# Target
include $(BUILD_STATIC_LIBRARY)
이 정적 라이브러리 (자바 소스에서 호출) 일부 JNI 래퍼와 사이에, 물론 네이티브 (C++) 소스가 포함되어 있습니다.
모든 정적 라이브러리 (.a
)를 빌드하고 나면 필요한 모든 .a
라이브러리가 포함 된 공유 라이브러리 (.so
)를 만들고 싶습니다. 여기 내가이 공유 라이브러리 구축하기 위해 사용하고있어 Android.mk
이다 (I 확인할 수
LOCAL_PATH := $(call my-dir)
#----------
# Static prebuilt libs
#----------
#-- my_static_lib_1
include $(CLEAR_VARS)
LOCAL_MODULE := my_static_lib_1
LOCAL_SRC_FILES := $(PATH_TO_LIBS)/my_static_lib_1.a
include $(PREBUILT_STATIC_LIBRARY)
#-- my_static_lib_2
include $(CLEAR_VARS)
LOCAL_MODULE := my_static_lib_2
LOCAL_SRC_FILES := $(PATH_TO_LIBS)/my_static_lib_2.a
include $(PREBUILT_STATIC_LIBRARY)
#----------
# Building shared lib
#----------
include $(CLEAR_VARS)
LOCAL_MODULE := my_shared_lib
#-- Some of the .a static libs need these libs
LOCAL_LDLIBS := \
-lz\
-llog \
$(PATH_TO_NDK_LIBS)\libstlport_static.a
#-- This variable is used to force libs to be included in the .so
LOCAL_WHOLE_STATIC_LIBRARIES := \
my_static_lib_1\
my_static_lib_2
include $(BUILD_SHARED_LIBRARY)
이 나에게 완벽한 .so
파일을 빌드 .a
libs와의 모든 기능을 포함을 그 생성에 nm 명령을 사용하여 lib). , 내가 MyClass에의 새로운 인스턴스를 만드는거야
,의 loadLibrary가 호출 :
public class MyClass
{
static {
Log.d("MYLOGS", "Loading...");
System.loadLibrary("my_shared_lib");
Log.d("MYLOGS", "Loaded.");
}
...
}
문제 :
는 완료로, 여기에 .java
파일을 동적으로 .so
lib 디렉토리를로드 하지만 결코 돌아 오지 않습니다. Loaded.
은 아니지만 Loading...
로그를 볼 수 있습니다. logCat은 Trying to load lib [...].so
라고하지만 그게 전부입니다. 앱이 정지합니다.
내 .so
파일에 하나의 정적 라이브러리 .a
만 있으면이 모든 기능이 정상적으로 작동합니다. 이 경우 내 원시 코드를 완벽하게 호출 할 수 있습니다. 하지만 내 프로젝트 8 .a
파일을 사용하고 loadLibrary 해당 끝나지 않기 때문에 내가 고정 된 응용 있어요.
loadLibrary
통화에 문제가 있습니까? 너는 어떤 생각을 가지고 있니?
감사합니다.
무한 루프에 들어가는 정적 초기화 프로그램이나로드 유형의 함수를 사용할 수 있습니까? "앱이 돌아 오지 않을"때 실제로 실제로 끝나는 것은 무엇입니까? Application Not Responding 대화 상자가 생깁니 까? 다양한 스레드가 멈춘 위치를 나타내는 logcat의 내용은 무엇입니까? 실수로 여러 개의 .a 파일로 빌드 된 간단한 라이브러리로 실제 라이브러리를 대체하고 여러 파일을 포함하고 있는지 또는 특히 파일 중 하나인지 여부를 좁힐 수 있는지 확인하십시오. –
또한 라이브러리 로딩을 지연 시켜서 ndk-gdb를 먼저 연결 한 다음 디버거로로드를 시도하는 동안 일어날 일을 볼 수 있습니다. –
앱이 응답하지 않는다는 대화 상자가 없습니다. 검은 색 화면이 있고 logcat에 "시작 시간 제한이 만료되어 잠자기 잠금을 포기했습니다."라고 표시됩니다. "lib.so를로드하려고 시도한 직후" (loadLibrary가 앱 실행시 호출된다는 것을 알고 있으므로 교착 상태가 아니지만 loadLibrary가 뭔가를 기다리는 것처럼 보입니다 ... – Vincent