2012-06-25 4 views
0

나는 dsplink 응용 프로그램을 android omapl138 보드에서 실행하고 있습니다. 터미널에서 응용 프로그램을 실행할 수 있습니다. 나는 NDK에서 DSPLink를 응용 프로그램을 포함 Android.mkjni 래퍼 개발을 위해 안드로이드 ndk에서 dsplink 응용 프로그램을 컴파일하는 방법

LOCAL_PATH:= $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_LDLIBS += $(LOCAL_PATH)/dsplink.a 

LOCAL_C_INCLUDES += C:\dsplink_1_65_01_05_eng\dsplink\gpp\export\INCLUDE\Linux\OMAPL138\sys 
LOCAL_C_INCLUDES += C:\dsplink_1_65_01_05_eng\dsplink\gpp\export\INCLUDE\Linux\OMAPL138\usr 
LOCAL_C_INCLUDES += C:\dsplink_1_65_01_05_eng\dsplink\gpp\inc\sys\linux 
LOCAL_C_INCLUDES += C:\dsplink_1_65_01_05_eng\dsplink\gpp\src\api 
LOCAL_C_INCLUDES += C:\dsplink_1_65_01_05_eng\dsplink\gpp\export\INCLUDE\Linux\OMAPL138\internal 
LOCAL_C_INCLUDES += C:\dsplink_1_65_01_05_eng\dsplink\gpp\export\INCLUDE\Linux\OMAPL138\sys\arch 

LOCAL_MODULE := libdsp-message 
LOCAL_SRC_FILES := message.c message_os.c 

include $(BUILD_SHARED_LIBRARY) 

을 사용하여 다음 컴파일 시도하고 컴파일하는 동안, 나는 시도 할 때 나는 semget 지난 2 월에 대한 불만을 가지고 있었다

"Compile thumb : dsp-message <= message.c 

"Compile thumb : dsp-message <= message_os.c 

SharedLibrary : libdsp-message.so 

C:/NDK/android-ndk-r8/samples/two-libs//jni/dsplink.a(dsplink.o): In 
function `DRV_Initialize': 
_sync_usr.c:(.text+0xb10): undefined reference to `getpagesize' C:/NDK/android-ndk-r8/samples/two-libs//jni/dsplink.a(dsplink.o): In 
function `DRV_ProtectInit': 
**_sync_usr.c:(.text+0x24b4): undefined reference to `semget'** 
_sync_usr.c:(.text+0x24d4): undefined reference to `__errno_location' 
_sync_usr.c:(.text+0x24f4): undefined reference to `semget' 
_sync_usr.c:(.text+0x2538): undefined reference to `semctl' C:/NDK/android-ndk-r8/samples/two-libs//jni/dsplink.a(dsplink.o): In 
function `DRV_ProtectExit': 
_sync_usr.c:(.text+0x25dc): undefined reference to `semctl' C:/NDK/android-ndk-r8/samples/two-libs//jni/dsplink.a(dsplink.o): In 
function `DRV_ProtectEnter': 
_sync_usr.c:(.text+0x26b4): undefined reference to `semop' 
_sync_usr.c:(.text+0x26c4): undefined reference to `__errno_location' C:/NDK/android-ndk-r8/samples/two-libs//jni/dsplink.a(dsplink.o): In 
function `DRV_ProtectLeave': 
_sync_usr.c:(.text+0x2800): undefined reference to `semop' C:/NDK/android-ndk-r8/samples/two-libs//jni/dsplink.a(dsplink.o): In 
function `DRV_installCleanupRoutines': 
_sync_usr.c:(.text+0x2898): undefined reference to `sigemptyset' 
_sync_usr.c:(.text+0x28a4): undefined reference to `sigfillset' C:/NDK/android-ndk-r8/samples/two-libs//jni/dsplink.a(dsplink.o): In 
function `NOTIFY_eventWorker': 
_sync_usr.c:(.text+0x7ee4): undefined reference to `sigfillset' C:/NDK/android-ndk-r8/samples/two-libs//jni/dsplink.a(dsplink.o): In 
function `_SYNC_USR_init': 
_sync_usr.c:(.text+0x13ca8): undefined reference to `semget' 
_sync_usr.c:(.text+0x13d30): undefined reference to `semctl' C:/NDK/android-ndk-r8/samples/two-libs//jni/dsplink.a(dsplink.o): In 
function `_SYNC_USR_exit': 
_sync_usr.c:(.text+0x13e34): undefined reference to `semget' 
_sync_usr.c:(.text+0x13e84): undefined reference to `semctl' C:/NDK/android-ndk-r8/samples/two-libs//jni/dsplink.a(dsplink.o): In 
function `_SYNC_USR_createCS': 
_sync_usr.c:(.text+0x14008): undefined reference to `semget' 
_sync_usr.c:(.text+0x14020): undefined reference to `__errno_location' C:/NDK/android-ndk-r8/samples/two-libs//jni/dsplink.a(dsplink.o): In 
function `_SYNC_USR_enterCS': 
_sync_usr.c:(.text+0x14358): undefined reference to `semop' 
_sync_usr.c:(.text+0x14368): undefined reference to `__errno_location' C:/NDK/android-ndk-r8/samples/two-libs//jni/dsplink.a(dsplink.o): In 
function `_SYNC_USR_leaveCS': 
_sync_usr.c:(.text+0x144a0): undefined reference to `semop' collect2: ld returned 1 exit status 

make: *** 
[C:/NDK/android-ndk-r8/samples/two-libs//obj/local/armeabi/libdsp-message.so] 
Error 1 
+0

dssplink 라이브러리를 사용하여 apk를 만드는 방법이 있습니까? – 123

+0

당신이 그것을 파악 했습니까 ?? – jxgn

답변

1

다음과 같은 오류를 얻을 수있다 콘솔 용 dsplink 샘플을 빌드합니다. 내 오류는 정의되지 않은 참조와 유사합니다. 필자는 표준 안드로이드 보트 보트 프로젝트와 함께 제공되는 libc를 사용하여 dsplink를 구축하려는 저의 실수로 인해 오류가 발생했음을 알았습니다. Gingerbread 2.3.4 소스 배포본의 바이오닉 libc를 TI DSP 소스의 libc로 대체했을 때, libc의 모든 참조 오류를 해결했습니다. 이 경험을 통해 기본적인 Android 안드로이드 라이브러리에있는 것보다 DSP 코드 기반으로 사용되는 C 라이브러리의 세마포어에 대한 지원이 더 많아지는 것 같습니다.

제안 : Android.mk 빌드를 가리키는 C 라이브러리가 기본 Android bionic libc가 아니라 DSP 프로젝트 용으로 제공된 C 라이브러리인지 확인합니다.

당신의 정의되지 않은 참조 중 일부 또는 대부분이 해결되어야하지만, Android.mk에 다른 문제가 있는지 확실하지 않습니다.

+0

'semget '및 기타 참조 된 기능을 제외하는 것은 Android 팀의 의식적인 결정이었습니다. http://source-android.frandroid.com/bionic/libc/docs/SYSV-IPC.TXT를 참조하십시오. –