2010-12-21 47 views
2

我目前正在尝试使用Cygwin在Windows上使用NDK为Android构建PocketSphinx库。我有PocketSphinxAndroidDemo项目代码。我还有pocketsphinx和shpinxbase项目作为E:/ Development/CMUSphinx文件夹的子文件夹。使用Cygwin在Windows上使用NDK尝试构建PocketSphinx for Android的问题

我试图从项目文件夹使用ndk生成。在项目/ JNI /文件夹中的Android.mk文件看起来是这样的 -

# Build the native component of the PocketSphinx library for Android. 

# You MUST change this to the absolute path of the directory containing 
# sphinxbase and pocketsphinx source code. 
SPHINX_PATH := E:/Development/CMUSphinx 

# Copy this Android.mk along with pocketsphinx_wrap.c and the contents of the 'edu' folder 
# built by swig to the jni/ directory of your Android project. 
BASE_PATH := $(call my-dir) 

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/util 
LOCAL_MODULE := sphinxutil 

LOCAL_SRC_FILES := \ 
bio.c \ 
bitvec.c \ 
case.c \ 
ckd_alloc.c \ 
cmd_ln.c \ 
dtoa.c \ 
err.c \ 
errno.c \ 
f2c_lite.c \ 
filename.c \ 
genrand.c \ 
glist.c \ 
hash_table.c \ 
heap.c \ 
huff_code.c \ 
info.c \ 
listelem_alloc.c \ 
logmath.c.arm \ 
matrix.c \ 
mmio.c \ 
pio.c \ 
profile.c \ 
sbthread.c \ 
strfuncs.c \ 
utf8.c 

include $(BUILD_STATIC_LIBRARY) 

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/fe 
LOCAL_MODULE := sphinxfe 
LOCAL_ARM_MODE := arm 

LOCAL_SRC_FILES := \ 
fe_interface.c \ 
fe_sigproc.c \ 
fe_warp_affine.c \ 
fe_warp.c \ 
fe_warp_inverse_linear.c \ 
fe_warp_piecewise_linear.c \ 
fixlog.c 

include $(BUILD_STATIC_LIBRARY) 

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 \ 
cmn_prior.c \ 
feat.c \ 
lda.c 

include $(BUILD_STATIC_LIBRARY) 

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/lm 
LOCAL_MODULE := sphinxlm 

LOCAL_SRC_FILES := \ 
fsg_model.c \ 
jsgf.c \ 
jsgf_parser.c \ 
jsgf_scanner.c \ 
lm3g_model.c \ 
ngram_model_arpa.c \ 
ngram_model_dmp.c \ 
ngram_model_set.c \ 
ngram_model.c 

include $(BUILD_STATIC_LIBRARY) 

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

LOCAL_PATH := $(SPHINX_PATH)/pocketsphinx/src/libpocketsphinx 
LOCAL_MODULE := pocketsphinx 

LOCAL_SRC_FILES := \ 
acmod.c  \ 
bin_mdef.c \ 
blkarray_list.c \ 
dict.c  \ 
dict2pid.c \ 
fsg_history.c \ 
fsg_lextree.c \ 
fsg_search.c \ 
hmm.c.arm  \ 
mdef.c  \ 
ms_gauden.c.arm \ 
ms_mgau.c.arm \ 
ms_senone.c.arm \ 
ngram_search.c \ 
ngram_search_fwdtree.c \ 
ngram_search_fwdflat.c \ 
phone_loop_search.c \ 
pocketsphinx.c \ 
ps_lattice.c \ 
ps_mllr.c \ 
ptm_mgau.c.arm \ 
s2_semi_mgau.c.arm \ 
tmat.c  \ 
vector.c 

include $(BUILD_STATIC_LIBRARY) 

# Create the dynamic library wrapper 
include $(CLEAR_VARS) 
LOCAL_C_INCLUDES := $(SPHINX_PATH)/sphinxbase/include/android $(SPHINX_PATH)/sphinxbase/include \ 
    $(SPHINX_PATH)/pocketsphinx/include 
LOCAL_CFLAGS += -DHAVE_CONFIG_H 
LOCAL_CFLAGS += -DANDROID_NDK 

LOCAL_PATH := $(BASE_PATH) 
LOCAL_MODULE := pocketsphinx_jni 

LOCAL_SRC_FILES := pocketsphinx_wrap.c 

PRIVATE_WHOLE_STATIC_LIBRARIES := \ 
$(call static-library-path,sphinxutil) \ 
$(call static-library-path,sphinxfe) \ 
$(call static-library-path,sphinxfeat) \ 
$(call static-library-path,sphinxlm) \ 
$(call static-library-path,pocketsphinx) 
LOCAL_STATIC_LIBRARIES := sphinxutil sphinxfe sphinxfeat sphinxlm pocketsphinx 

include $(BUILD_SHARED_LIBRARY) 

当我运行NDK-build命令我碰到下面的错误:

build-binary.mk:197: *** target pattern contains no '%'. Stop. 

我可订做ndk样品很好。任何线索是什么导致这个错误?提前谢谢了!

+0

@Chris - 你可以请张贴这个答案吗?你提到的驱动器号和路径,实际上让我对我的正确答案。我希望能够将你的答案标记为正确:)我添加了SPHINX_PATH:= $(shell cygpath -u $(SPHINX_PATH))在SPHINX_PATH声明下,现在所有的工作都很好!谢谢! – 2010-12-21 18:59:08

回答

1

你知道这个项目以前是否使用cygwin构建过? Cygwin有许多古怪之处,从Windows驱动器字母与unix路径的尴尬组合,到在异常集合路径中解释无意的双斜线等等。您可以尝试/ cygdrive/e /类型的路径而不是驱动器盘符,但是谁知道这是否会有所帮助。

+0

此答案让我到正确的地方。我添加了SPHINX_PATH:= $(shell cygpath -u $(SPHINX_PATH))在SPHINX_PATH声明下,现在所有的工作都很棒!谢谢! – 2010-12-21 19:34:00

1

杰森, 你必须改变你的狮身人面像路径cygwin的格式,即没有 “:”
变化

SPHINX_PATH := E:/Development/CMUSphinx 

SPHINX_PATH := /cygdrive/e/Development/CMUSphinx 

这将解决该错误

3

贾森,编辑jni/Android.mk文件

更改行162:

LOCAL_STATIC_LIBRARIES := sphinxutil sphinxfe sphinxfeat sphinxlm pocketsphinx 

到:

LOCAL_STATIC_LIBRARIES := pocketsphinx sphinxlm sphinxfeat sphinxfe sphinxutil 

这将解决您的问题。