2

由于我将我的项目定位到 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 文档?

4

5 回答 5

2

临时解决方法:在安装了 Build-Tools 17 后安装 Android Build-Tools 版本 19 后, CarouselExample RS遇到了同样的问题。卸载 Build-Tools 版本 19 后,它再次工作。我不知道版本 19 发生了什么。

于 2013-11-12T11:33:32.137 回答
1
  1. 本机 RS 不能从新版本的 RS 向后兼容到旧版本的 RS(LLVM 位码差异,诸如此类)。在这种情况下,您会得到预期的错误。

  2. 带有支持库的 RS 使 API 18 RS 能够使用仅 CPU 的回退路径在 API 8 到 API 17 上运行。在具有 API 18 或更高版本的设备上,它将使用比特码、JIT 编译、GPU 加速等——与本机相同。

  3. 您可能想要的选项是 llvm-rs-cc 的选项,核心 RS 编译器:-target-api。可能有一种方法可以从 Eclipse 设置它,但是在你的 project.properties 中你应该能够设置

渲染脚本.target=14

事情可能会奏效。

于 2013-11-07T18:41:25.363 回答
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)不再工作,所以这不是一个很好的解决方案。

于 2013-11-08T18:23:31.570 回答
0

我使用最新的 RS buildtools (20) 在 4.3 (API 18) 上针对 x86 设备:

renderscript.support.mode=true
renderscript.target = 18

我也有同样的错误,在堆栈跟踪中出现了许多查找失败的错误,在我的特定情况下与powexp函数相关:

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

因此,为了解决这个问题,我将powexp的调用分别替换为native_powr(在文档中不可见但可用)和RS 源代码中的native_exp。请注意,正确清理项目也很重要,否则您最终可能会遇到不同的崩溃:

A/libc(5844): Fatal signal 11 (SIGSEGV) at 0x97698030 (code=2), thread 5844 (****)
于 2014-08-09T14:32:24.847 回答
0

你提到看到这个日志行,但代码真的运行/工作吗?该日志表示信息文件不存在,每当您首次安装应用程序或清除其缓存时都会出现这种情况。信息文件是一个内部实现细节,它允许我们为 RS 缓存/加载现有的二进制代码。我认为这里没有实际的错误。如果您仍然看到代码根本没有运行,请告诉我。

于 2013-11-08T17:45:06.467 回答