我發現了this library,它被稱爲SoundTouch-Android。Android NDK - 編譯庫時出錯
我將jni
和armeabi-v7a
文件夾複製到我的項目中。
在終端要去jni
文件夾後,我輸入:
export ANDROID_NDK=~/daniele/Android/Sdk/ndk-bundle
export NDK_ROOT=$ANDROID_NDK
export PATH=${PATH}:${ANDROID_NDK}
ndk-build
這是我得到:
Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-14.
Android NDK: WARNING:/home/daniele/AndroidStudioProjects/Chords2/app/jni/Android.mk:soundtouch: non-system libraries in linker flags: -lgcc
Android NDK: This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES
Android NDK: or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the
Android NDK: current module
Android NDK: WARNING:/home/daniele/AndroidStudioProjects/Chords2/app/jni/Android.mk:soundtouch: non-system libraries in linker flags: -lgcc
Android NDK: This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES
Android NDK: or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the
Android NDK: current module
[armeabi-v7a] Compile++ thumb: soundtouch <= soundtouch-jni.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= AAFilter.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= FIFOSampleBuffer.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= FIRFilter.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= cpu_detect_x86.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= RateTransposer.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= SoundTouch.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= TDStretch.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= BPMDetect.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= PeakFinder.cpp
[armeabi-v7a] SharedLibrary : libsoundtouch.so
[armeabi-v7a] Install : libsoundtouch.so => libs/armeabi-v7a/libsoundtouch.so
[armeabi] Compile++ thumb: soundtouch <= soundtouch-jni.cpp
/home/daniele/AndroidStudioProjects/Chords2/app/jni/soundtouch-jni.cpp:133:2: error:
no matching function for call to 'convertInput16'
convertInput16(ar, fBufferIn, BUFF_SIZE);
^~~~~~~~~~~~~~
/home/daniele/AndroidStudioProjects/Chords2/app/jni/soundtouch-jni.cpp:58:13: note:
candidate function not viable: no known conversion from
'soundtouch::SAMPLETYPE *' (aka 'short *') to 'float *' for 2nd argument
static void convertInput16(jbyte*, float*, int);
^
/home/daniele/AndroidStudioProjects/Chords2/app/jni/soundtouch-jni.cpp:210:16: error:
no matching function for call to 'write'
processed += write(fBufferIn, fBufferOut, nSamples * cha...
^~~~~
/home/daniele/AndroidStudioProjects/Chords2/app/jni/soundtouch-jni.cpp:56:12: note:
candidate function not viable: no known conversion from
'soundtouch::SAMPLETYPE *' (aka 'short *') to 'const float *' for 1st
argument
static int write(const float*, queue<signed char>*, int, int);
^
2 errors generated.
我怎樣才能解決呢?
UPDATE:
我想修改我Application.mk
在丹艾伯特的回答表明後重建它。現在我得到了一個不同的日誌,但仍然是一個錯誤,我不知道如何解決。
Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-14.
Android NDK: WARNING:/home/daniele/AndroidStudioProjects/Chords2/app/jni/Android.mk:soundtouch: non-system libraries in linker flags: -lgcc
Android NDK: This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES
Android NDK: or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the
Android NDK: current module
[armeabi-v7a] Compile++ thumb: soundtouch <= soundtouch-jni.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= AAFilter.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= FIFOSampleBuffer.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= FIRFilter.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= cpu_detect_x86.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= RateTransposer.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= SoundTouch.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= TDStretch.cpp
/home/daniele/AndroidStudioProjects/Chords2/app/jni/soundtouch/source/SoundTouch/TDStretch.cpp:72:13: warning:
unused variable '_scanOffsets' [-Wunused-const-variable]
const short _scanOffsets[5][24]={
^
1 warning generated.
[armeabi-v7a] Compile++ thumb: soundtouch <= BPMDetect.cpp
[armeabi-v7a] Compile++ thumb: soundtouch <= PeakFinder.cpp
[armeabi-v7a] SharedLibrary : libsoundtouch.so
/home/daniele/AndroidStudioProjects/Chords2/app/jni/soundtouch/source/SoundTouch/RateTransposer.cpp:296: error: undefined reference to 'soundtouch::InterpolateLinearFloat::InterpolateLinearFloat()'
/home/daniele/AndroidStudioProjects/Chords2/app/jni/soundtouch/source/SoundTouch/RateTransposer.cpp:302: error: undefined reference to 'soundtouch::InterpolateShannon::InterpolateShannon()'
/home/daniele/AndroidStudioProjects/Chords2/app/jni/soundtouch/source/SoundTouch/RateTransposer.cpp:299: error: undefined reference to 'soundtouch::InterpolateCubic::InterpolateCubic()'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [/home/daniele/AndroidStudioProjects/Chords2/app/obj/local/armeabi-v7a/libsoundtouch.so] Error 1
我不太知道,如果它是有用的,但我將在下面爲你檢查出後我Android.mk
:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# *** Remember: Change -O0 into -O2 in add-applications.mk ***
LOCAL_MODULE := soundtouch
LOCAL_SRC_FILES := soundtouch-jni.cpp soundtouch/source/SoundTouch/AAFilter.cpp soundtouch/source/SoundTouch/FIFOSampleBuffer.cpp \
soundtouch/source/SoundTouch/FIRFilter.cpp soundtouch/source/SoundTouch/cpu_detect_x86.cpp \
soundtouch/source/SoundTouch/RateTransposer.cpp soundtouch/source/SoundTouch/SoundTouch.cpp \
soundtouch/source/SoundTouch/TDStretch.cpp soundtouch/source/SoundTouch/BPMDetect.cpp soundtouch/source/SoundTouch/PeakFinder.cpp
# for native audio
LOCAL_LDLIBS += -lgcc
LOCAL_C_INCLUDES += $(LOCAL_PATH)/soundtouch/include
# --whole-archive -lgcc
# for logging
LOCAL_LDLIBS += -llog
# for native asset manager
#LOCAL_LDLIBS += -landroid
# don't export all symbols
# added "-marm" switch to use arm instruction set instead of thumb for improved calculation performance.
LOCAL_CFLAGS += -Wall -fvisibility=hidden -I soundtouch/source/../include -D ST_NO_EXCEPTION_HANDLING -fdata-sections -ffunction-sections -marm
include $(BUILD_SHARED_LIBRARY)
你定義自己的'write'功能?定義與標準庫中的函數名稱相同的函數可能是一個糟糕的主意...... –
不,我沒有自己定義它。我只是試圖建立圖書館,因爲我從問題中提供的鏈接下載它。我猜它已經與android.mk有關,儘管我現在不能發佈它。我稍後會更新這個問題。 – Daniele