由于我将我的项目定位到SDK 19(KitKat),我在Nexus 7(2013 | SDK 18)上随机收到此消息:
11-07 17:54:27.502: E/bcc(2033): Invalid RS info file /data/data/<package>/cache/com.android.renderscript.cache/<script-name>.o.info! (No such file or directory)
这是什么意思?为什么还没有任何有用的RenderScript文档?
答案 0 :(得分:2)
临时解决方法: 安装Build-Tools 17后,在安装Android Build-Tools版本19后,我遇到了与CarouselExample RS相同的问题。卸载Build-Tools版本19后,它再次运行。我不知道版本19发生了什么。
答案 1 :(得分:1)
原生RS不会向后兼容从新版本的RS到旧版本的RS(LLVM bitcode差异,类似的东西)。在这种情况下,预计会出现错误。
带有支持lib的RS使API 18 RS能够使用仅CPU回退路径通过API 17在API 8上运行。在API为18或以上的设备上,它将使用bitcode,JIT编译,GPU加速等 - 与原生相同。
您可能需要的选项是llvm-rs-cc的选项,核心RS编译器:-target-api。可能有一种方法可以从Eclipse中设置它,但是在project.properties中你应该可以设置
renderscript.target = 14
事情可能有用。答案 2 :(得分:1)
问题是因为脚本使用“旧”内核样式:
void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) {
将内核更新为后
uchar4 __attribute__((kernel)) kernel(uchar4 in, uint32_t x, uint32_t y) {
它有效。 但是,现在我遇到的问题是旧的目标设备(例如API 14)不再起作用,所以这不是一个很好的解决方案。
答案 3 :(得分:0)
您提到看到此日志行,但代码是否实际运行/工作?该日志表示信息文件不存在,无论何时第一次安装应用程序或清除其缓存时都是如此。信息文件是一个内部实现细节,允许我们缓存/加载RS的现有二进制代码。我不认为这里有一个实际的错误。如果你仍然看到代码根本没有运行,请告诉我。
答案 4 :(得分:0)
我使用最新的RS buildtools(20)在4.3(API 18)上定位x86设备:
renderscript.support.mode=true
renderscript.target = 18
我也遇到了同样的错误,在堆栈跟踪中出现了很多查找失败错误,在我的特定情况下与 pow 和 exp 相关功能:
E/RenderScript(5251): ScriptC sym lookup failed for powf
E/RenderScript(5251): ScriptC sym lookup failed for expf
[...]
E/bcc(5251): Some symbols are found to be undefined during relocation!
E/bcc(5251): Error occurred when performs relocation on /data/data/*********/cache/com.android.renderscript.cache/synth.o!
[...]
E/RenderScript(5251): bcc: FAILS to prepare executable for 'synth'
[...]
E/AndroidRuntime(5251): Caused by: android.renderscript.RSRuntimeException: Loading of ScriptC script failed.
[...]
I/Process(5251): Sending signal. PID: 5251 SIG: 9
因此,为了解决这个问题,我分别用 native_powr 替换了 pow 和 exp 的调用(在文档中不可见但可用) RS源代码中的 native_exp 。 请注意,正确清理项目也很重要,否则您最终可能会遇到不同的崩溃:
A/libc(5844): Fatal signal 11 (SIGSEGV) at 0x97698030 (code=2), thread 5844 (****)