Проблема при попытке собрать PocketSphinx для Android с использованием NDK в Windows с Cygwin - PullRequest
2 голосов
/ 21 декабря 2010

В настоящее время я пытаюсь собрать библиотеку PocketSphinx для Android, используя NDK в Windows с Cygwin. У меня есть код проекта PocketSphinxAndroidDemo. У меня также есть проекты pocketsphinx и shpinxbase как подпапки в папке E: / Development / CMUSphinx.

Я пытаюсь собрать с помощью ndk-build из папки проекта. Файл Android.mk в папке / jni / проекта выглядит следующим образом -

# 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. Любая подсказка, что вызывает эту ошибку? Большое спасибо заранее!

Ответы [ 4 ]

3 голосов
/ 12 апреля 2012

Джейсон, Отредактируйте файл jni / Android.mk

Измените строку 162:

LOCAL_STATIC_LIBRARIES := sphinxutil sphinxfe sphinxfeat sphinxlm pocketsphinx

на:

LOCAL_STATIC_LIBRARIES := pocketsphinx sphinxlm sphinxfeat sphinxfe sphinxutil

Это решит вашу проблему.

1 голос
/ 13 июня 2011

Джейсон, Вы должны изменить свой путь сфинкса на формат cygwin, т.е. без ":"
изменить

SPHINX_PATH := E:/Development/CMUSphinx

до

SPHINX_PATH := /cygdrive/e/Development/CMUSphinx

это исправит ошибку

1 голос
/ 21 декабря 2010

Знаете ли вы, если этот проект был ранее построен с использованием Cygwin с успехом?У Cygwin есть ряд странностей, от неуклюжего сочетания букв дисков Windows с путями Unix до необычной интерпретации случайной двойной косой черты в собранном пути и многое другое.Вы можете использовать путь / cygdrive / e / type вместо буквы диска, но кто знает, поможет ли это.

0 голосов
/ 03 мая 2013

Я использовал следующую ссылку для сборки Pocketsphinx на Android в Windows https://sites.google.com/site/opiatefuchs/home/pocketsphinxandroiddemo, но пропустил один шаг, который @Hitesh упомянул о замене LOCAL_STATIC_LIBRARIES в файле jni / Android.mk, и я смог собрать его до последней версии 0.8.спасибо @ Hitesh

...