Получение не может найти «_Z10rsIsObject13rs_allocation» с библиотекой поддержки RenderScript

Я выполнил все шаги, чтобы создать RenderScript/FilterScript для нескольких целей. Я также включил библиотеку поддержки для RenderScript. Мой целевой API 18.

Когда я запускаю свой RenderScript для этой цели, все работает нормально. Когда я пытаюсь запустить его на устройстве API-14, я вижу следующий вывод журнала

11-16 13:12:34.791: D/dalvikvm(9226): Trying to load lib /data/data/<package>/lib/libRSSupport.so 0x41635250
11-16 13:12:34.811: D/dalvikvm(9226): Added shared lib /data/data/<package>/lib/libRSSupport.so 0x41635250
11-16 13:12:34.821: D/dalvikvm(9226): No JNI_OnLoad found in /data/data/<package>/lib/libRSSupport.so 0x41635250, skipping init
11-16 13:12:34.821: D/dalvikvm(9226): Trying to load lib /data/data/<package>/lib/librsjni.so 0x41635250
11-16 13:12:34.821: D/dalvikvm(9226): Added shared lib /data/data/<package>/lib/librsjni.so 0x41635250
11-16 13:12:34.821: V/RenderScript_jni(9226): RS compat mode
11-16 13:12:34.831: V/RenderScript(9226): 0x5bf60e10 Launching thread(s), CPUs 4
11-16 13:12:34.851: E/RenderScript(9226): Unable to open shared library (/data/data/<package>/lib/librs.<script>.so): Cannot load library: reloc_library[1306]:   119 cannot locate '_Z10rsIsObject13rs_allocation'...
11-16 13:12:34.851: E/RenderScript(9226): Unable to open system shared library (/system/lib/librs.<script>.so): Cannot load library: find_library[1201]:   119 'librs.<script>.so' failed to load previously
11-16 13:12:34.851: W/System.err(9226): android.support.v8.renderscript.RSRuntimeException: Loading of ScriptC script failed.

Я использую функцию «rsIsObject» в своем скрипте, которая, похоже, вызывает ошибку. я пытался использовать

#include "rs_object.rsh"

в моем сценарии, но не имеет значения, включаю я его или нет.


person TSGames    schedule 16.11.2013    source источник


Ответы (2)


Мы случайно пропустили некоторые реализации rsIsObject() в библиотеке поддержки. Хорошей новостью является то, что это довольно легко исправить (и после исправления потребуется просто обновить SDK). Тем временем вы можете использовать ужасный обходной путь: приведите параметр к rs_element, и он должен работать.

person Stephen Hines    schedule 19.11.2013
comment
Приятно слышать, что это, по крайней мере, кажется известной проблемой. Однако упомянутый вами обходной путь, похоже, не работает: rsIsObject((rs_element)myObject) вызывает ошибку в компиляторе: операнд типа «rs_allocation», где требуется арифметический тип или тип указателя. - person TSGames; 20.11.2013

Наконец-то сделал обходной путь, основанный на совете Стивена:

static bool isObject(rs_allocation a){
    return rsIsObject(rsAllocationGetElement(a));
}
person TSGames    schedule 08.12.2013