2012-06-25 70 views
0

我有在android omapl138 board上運行的dsplink應用程序。我可以在終端中運行應用程序。 我已經包含在NDK的DSPLINK應用程序並嘗試使用編譯如下Android.mk如何在android ndk中編譯dsplink應用程序以開發jni包裝器

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) 

,並在編譯時,我得到以下錯誤

"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

有什麼方法可以用dsplink庫創建一個apk? – 123

+0

你弄明白了嗎? – jxgn

回答

1

我對了semget去年二月投訴當我試圖爲控制檯構建dsplink樣本。我的錯誤看起來類似於未定義的引用。我發現我的錯誤是由於我試圖使用標準Android rowboat項目提供的libc構建dsplink。當我用TI DSP源代碼中的libc替換Gingerbread 2.3.4 sources distribution的仿生libc時,它解決了我所有的libc引用錯誤。從這個經驗看來,在DSP代碼庫中使用的C庫中的信號量似乎比基本Android仿生庫中的更多。

建議:我會確保您的Android.mk版本所指向的用於鏈接的C庫是爲DSP項目提供的C庫,而不是默認的Android仿生libc。

這應該解決一些或大部分未定義的引用,但我不確定在你的Android.mk中是否有其他問題。

+0

排除'semget'和其他引用函數是Android團隊的一個有意識的決定,請參閱http://source-android.frandroid.com/bionic/libc/docs/SYSV-IPC.TXT –

相關問題