2016-09-21 2 views
0

내 문제는 정적 라이브러리를 사용하여 공유 라이브러리를 작성하려고한다는 것입니다.커널 드라이버에 정의 된 NDK c app에서 호출되는 함수를 사용할 수 있습니까?

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := libRip 
LOCAL_SRC_FILES := src/Rip_api.cpp src/Rip_crypto.cpp 

LOCAL_CFLAGS := -DCLR_INTERAPTIV_I7 -DCLR_INTERAPTIV -v 

#only include corelockr and rip headers 
LOCAL_C_INCLUDES := $(LOCAL_PATH)/inc/ $(LOCAL_PATH)/include/ $(LOCAL_PATH)/../../hardware/libhardware/include/hardware/ 

LOCAL_LDLIBS := -llog -L$(LOCAL_PATH)/library -lthisis_crypto -lthisis_interaptiv 
LOCAL_SHARED_LIBRARIES = libsmem.sastra 
#test seqr library 
#LOCAL_LDFLAGS := -v -L$(LOCAL_PATH)/library -lthisis_crypto -lthisis_interaptiv 

#this option will build static library 
include $(BUILD_SHARED_LIBRARY) 

는이 일을하면 좀 정의되지 않은 참조 오류가 나노을 수행시이

I7_Embedded_SDK/corelockr/././src/request.c:494: undefined reference to `function' 

같은

mmm -B path/to/test/app/android.mk 

나는이 request.o 파일에서 볼 수

request.o: 
     U function 

나는 t의 근원이 없다. 그는 주 라이브러리 thisis_crypto 및 thisis_interaptive이지만 래퍼 라이브러리 libRip.so는이 함수를 호출합니다. request.o가 라이브러리에 있습니다. thisis_interaptive.

즉이 함수 정의가 라이브러리에 없음을 의미합니다. 또한 나는 또한이 여기에 정의 된 의미

T function 

을 kernel_driver.ko nm의 모든 작업 의 일부 커널 드라이버 ipc.ko을 확인.

1) 커널 드라이버를 사용하고있는 일부 기능을 빌드하려고 할 가능성이 있습니다.

2) 가능한 경우 공유 라이브러리를 어떻게 구축 할 수 있습니까?

감사합니다.

답변

0

커널 및 사용자 공간은 두 개의 완전히 다른 주소 공간입니다. 따라서 짧은 대답은 NO입니다.

+0

그래서 사용자 공간 라이브러리의 nm에서 정의되지 않은 함수가 표시되는 경우 이는 실제로 정의되지 않았으며 실수 였음을 의미합니다. 또한 정적 라이브러리로 빌드 할 때 정의되지 않은 참조 오류가 발생하지 않습니다. 응용 프로그램이 라이브러리에서 정의되지 않은 함수를 사용하지 않을 수 있으므로 이러한 함수가 실행 파일에서 제거 될 수 있습니까? –

+0

죄송합니다. 나는 정말로 당신의 질문을 이해하지 못합니다. – Ming