2011-03-02 86 views
4

我想編譯PocketSphinxAndroidDemo,它提供了Android上CMU pocketsphinx語音識別器的示例實現。我第一次收到類似於討論here的錯誤。執行NDK-構建之後,我得到這個錯誤:試圖使用NDK構建PocketSphinxAndroidDemo的問題

Gdbserver  : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver 
Gdbsetup  : libs/armeabi/gdb.setup 
Compile thumb : pocketsphinx_jni <= pocketsphinx_wrap.c 
/home/nick/workspace/android/PocketSphinxDemo/jni/pocketsphinx_wrap.c:761:28: error: sphinxbase/err.h: No such file or directory 
/home/nick/workspace/android/PocketSphinxDemo/jni/pocketsphinx_wrap.c: In function 'Java_edu_cmu_pocketsphinx_pocketsphinxJNI_Decoder_1processRaw_1_1SWIG_10': 
/home/nick/workspace/android/PocketSphinxDemo/jni/pocketsphinx_wrap.c:1441: warning: assignment discards qualifiers from pointer target type 
make: *** [/home/nick/workspace/android/PocketSphinxDemo/obj/local/armeabi/objs-debug/pocketsphinx_jni/pocketsphinx_wrap.o] Error 1 

我試圖重建sphinxbasepocketsphinx圖書館和ndk-build -B重建的建議,但沒有奏效。然後我修改了JNI/pocketsphinx.i痛飲文件改變包括err.h:

#include <pocketsphinx.h> 
//#include <sphinxbase/err.h> 
#include <err.h> 

沒有任何人試圖編譯PocketSphinxAndroidDemo曾經遇到這樣的問題?我的編輯似乎讓我在我的編輯得到進一步的,但現在我越來越組件相關的錯誤:

Gdbserver  : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver 
Gdbsetup  : libs/armeabi/gdb.setup 
Compile thumb : pocketsphinx_jni <= pocketsphinx_wrap.c 
/home/nick/workspace/android/PocketSphinxDemo/jni/pocketsphinx_wrap.c: In function 'Java_edu_cmu_pocketsphinx_pocketsphinxJNI_Decoder_1processRaw_1_1SWIG_10': 
/home/nick/workspace/android/PocketSphinxDemo/jni/pocketsphinx_wrap.c:1442: warning: assignment discards qualifiers from pointer target type 
Compile thumb : sphinxfeat <= cmn.c 
/tmp/cceyE035.s: Assembler messages: 
/tmp/cceyE035.s:655: Error: selected processor does not support `smull r1,r2,r0,r4' 
/tmp/cceyE035.s:657: Error: unshifted register required -- `orr r1,r1,r2,lsl#20' 
/tmp/cceyE035.s:932: Error: selected processor does not support `smull r1,r2,r0,r4' 
/tmp/cceyE035.s:934: Error: unshifted register required -- `orr r1,r1,r2,lsl#20' 
make: *** [/home/nick/workspace/android/PocketSphinxDemo/obj/local/armeabi/objs-debug/sphinxfeat/cmn.o] Error 1 

同樣,沒有人知道如何解決這個問題呢?我還沒有看到任何其他開發者抱怨這個問題,所以我很猶豫要走得更遠。謝謝你的幫助。

+0

我設法讓我的代碼進行編譯,下面用我的解決方案;然而,我不相信這是必要的,因爲我沒有讀過其他人需要做同樣的事情。所以,請隨時提出您的解決方案。 – 2011-03-03 15:51:11

回答

2

顯然,某些源還需要標記爲ARM編譯。我修改了Android.mk的以下部分,將cmn.c和lda.c設置爲使用ARM進行編譯。

include $(CLEAR_VARS) 
LOCAL_C_INCLUDES := $(SPHINX_PATH)/sphinxbase/include/android $(SPHINX_PATH)/sphinxbase/include 
LOCAL_CFLAGS += -DHAVE_CONFIG_H 
LOCAL_CFLAGS += -DANDROID_NDK 

LOCAL_PATH := $(SPHINX_PATH)/sphinxbase/src/libsphinxbase/feat 
LOCAL_MODULE := sphinxfeat 

LOCAL_SRC_FILES := \ 
    agc.c \ 
    cmn.c.arm \ 
    cmn_prior.c.arm \ 
    feat.c \ 
    lda.c.arm 

我仍然想知道是否有其他人必須這樣做才能讓他們的代碼成功編譯。

1

編輯文件JNI/Android.mk

更改行162:

LOCAL_STATIC_LIBRARIES := sphinxutil sphinxfe sphinxfeat sphinxlm pocketsphinx 

到:

LOCAL_STATIC_LIBRARIES := pocketsphinx sphinxlm sphinxfeat sphinxfe sphinxutil