2016-03-15 66 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

这很明智。希望它很快得到解决:) –