2012-06-11 76 views
1

我在Android :: Mutex和Android :: AudioTrack鏈接時遇到了奇怪的未定義引用,我接管了一個項目。Android NDK - 對Android的未定義引用:: Mutex,Android :: AudioTrack

有沒有人有任何想法?有沒有Android靜態庫包含在那裏?

SharedLibrary:* * jni.so

/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `__static_initialization_and_destruction_0': 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:29: undefined reference to `android::Mutex::Mutex()' 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:29: undefined reference to `android::Mutex::~Mutex()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:232: undefined reference to `android::Mutex::lock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `~Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:234: undefined reference to `android::Mutex::unlock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:232: undefined reference to `android::Mutex::lock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `android_mute': 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:263: undefined reference to `android::AudioTrack::mute(bool)' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `~Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:234: undefined reference to `android::Mutex::unlock()' 
/Android/source/frameworks/base/include/utils/threads.h:234: undefined reference to `android::Mutex::unlock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:232: undefined reference to `android::Mutex::lock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `android_resume': 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:255: undefined reference to `android::AudioTrack::start()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `~Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:234: undefined reference to `android::Mutex::unlock()' 
/Android/source/frameworks/base/include/utils/threads.h:234: undefined reference to `android::Mutex::unlock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:232: undefined reference to `android::Mutex::lock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `android_pause': 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:247: undefined reference to `android::AudioTrack::pause()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `~Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:234: undefined reference to `android::Mutex::unlock()' 
/Android/source/frameworks/base/include/utils/threads.h:234: undefined reference to `android::Mutex::unlock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `android_get_delay': 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:237: undefined reference to `android::AudioTrack::latency() const' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:232: undefined reference to `android::Mutex::lock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `android_uninit': 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:220: undefined reference to `android::AudioTrack::stop()' 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:228: undefined reference to `android::AudioTrack::~AudioTrack()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `~Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:234: undefined reference to `android::Mutex::unlock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:232: undefined reference to `android::Mutex::lock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `android_start': 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:197: undefined reference to `android::AudioTrack::initCheck() const' 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:198: undefined reference to `android::AudioTrack::start()' 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:201: undefined reference to `android::AudioTrack::setVolume(float, float)' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `~Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:234: undefined reference to `android::Mutex::unlock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `android_start': 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:207: undefined reference to `android::AudioTrack::~AudioTrack()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:232: undefined reference to `android::Mutex::lock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `android_init': 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:122: undefined reference to `android::AudioTrack::AudioTrack()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `~Autolock': 
/Android/source/frameworks/base/include/utils/threads.h:234: undefined reference to `android::Mutex::unlock()' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `android_init': 
/Users/kevin/Desktop/player2/videoplayer/LibPlayer/amadec/audio_out/android_out.cpp:139: undefined reference to `android::AudioTrack::set(int, unsigned int, int, int, int, unsigned int, void (*)(int, void*, void*), void*, int, android::sp<android::IMemory> const&, bool, int)' 
/Users/kevin/Desktop/player2/videoplayer/videoplayer/obj/local/armeabi-v7a/libamadec.a(android_out.o): In function `~sp': 
/Android/source/frameworks/base/include/utils/RefBase.h:378: undefined reference to `android::RefBase::decStrong(void const*) const' 
collect2: ld returned 1 exit status 

回答

3

這困擾着我,以及 - 但我最後用仿生的頭(bionic/libc/include)連接解決它, - 重要組成部分 - #define「荷蘭國際集團HAVE_PTHREADS(即添加LOCAL_CFLAGS += HAVE_PTHREADS)。

1

那麼這些都是一些奇怪的錯誤... 看起來每次引用從Android ::互斥或Android的東西: :AudioTrack庫連接器無法找到這些功能。我只能說因爲這些庫不是android標準庫的一部分,所以確保你的構建路徑中包含它們,否則運氣不錯。

+0

謝謝你的回覆......他們的頭文件是,但實際.so/.a庫包含它們? libmedia.so用於AudioTrack,但包括它沒有區別。 –

+0

沒有看到你的源碼很難說..確保你有一個對象的實例可以訪問這些函數..我唯一能想到的其他事情可能是這些頭文件調用其他類不包括在你的項目。似乎有些參考錯誤在包含的類中。對不起,我不能更有幫助。 – Joel

+0

但是這是在鏈接時間,他們應該已經包括在內。我嘗試添加-landroid和-lmedia鏈接標誌,但沒有成功。 –

相關問題