2016-03-15 69 views
7

UPDATE 2016年3月19日:有超能力釋放與NDK R11正常工作新的二進制文件NDK-構建失敗NDK最近更新後建立的音頻超能力圖書館

我試圖建立庫超能力樣品CrossExample項目在Android Studio中。直到最近NDK更新它的工作般的魅力,但現在NDK建造的執行提供了一個錯誤:

Error:error: undefined reference to '__page_size' 

我試着用不同的工具鏈建立,刪除/添加幾個構建標誌,沒有運氣這麼遠。

在另一個使用Superpowered SDK和幾乎相同配置的項目中,我得到了一些其他的錯誤細節。輸出消息日誌的一部分:

/android/ndk/platforms/android-9/arch-x86/usr/include/unistd.h:173: error: undefined reference to '__page_size' 
/android/ndk/platforms/android-9/arch-x86/usr/include/unistd.h:173: error: undefined reference to '__page_size' 
clang++: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [/Users/user_name/StudioProjects/project_name/app/src/main/jniSuperpowered/obj/local/x86/libNativeLibName.so] Error 1 
make: *** Waiting for unfinished jobs.... 
/Volumes/iMect/iphone/SuperpoweredSource/decoder/SuperpoweredDecoder.cpp:120: error: undefined reference to '__page_size' 
/Volumes/iMect/iphone/SuperpoweredSource/decoder/hlsreader.cpp:582: error: undefined reference to '__page_size' 
clang++: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [/Users/user_name/StudioProjects/project_name/app/src/main/jniSuperpowered/obj/local/armeabi-v7a/libNightcorizerSuperpowered.so] Error 1 
FAILURE: Build failed with an exception. 

看起來不對的東西是unistd.h中__page_size的未定義引用。不過,我對進一步的故障排除知之甚少。

感謝任何幫助/建議!

+0

更新之前您使用的是哪個版本的NDK?你有沒有更新到r11? –

+0

我使用的是與Android Studio捆綁的版本 – Sam

回答

11

在此NDK commit中所做的更改似乎解釋了您所看到的問題。根據提交說明,對於Android API級別12及以下,__page_size被替換爲PAGE_SIZE。由於您使用API​​級別9和直接引用__page_size的代碼,因此您會看到此更改的影響。

但是,它看起來像int getpagesize()方法簽名跨越NDK版本或通過API水平沒有改變,所以你應該能夠在以下位置與getpagesize()更換的__page_size使用情況,以解決此錯誤:

SuperpoweredSource /解碼器/ SuperpoweredDecoder.cpp:120 SuperpoweredSource /解碼器/ hlsreader.cpp:582

更新: 爲了修正它,而無需修改超能力的源代碼,你需要定義符號__page_size。要做到這一點,你可以建立其只包含

#include <unistd.h> 
extern unsigned int __page_size = getpagesize(); 

然後一個微小的虛擬庫,這個庫中添加一個模塊到您的Android.mk(或您的build.gradle如果您使用的是新的實驗系統)並使Superpowered模塊取決於虛擬模塊。

或者,您可以使用Superpowered提交錯誤報告。

+0

謝謝您的解釋。我已經看到了unistd.h的來源,是的,這似乎是一個正確的事情。但是我無法控制庫源代碼,所以我仍然需要一個解決方法 – Sam

4

因此,作爲一種解決方案,我將NDK恢復爲工作的r10e。將使用它,直到超級圖書館得到修復。非常感謝@bullsy

+1

這很明智。希望它很快得到解決:) –