Я использую следующий код самонастройки, чтобы загрузить свою нативную активность (jngl-тест):«dlopen: Недопустимый аргумент» при загрузке нативной активности
#include <android/native_activity.h>
#include <android/log.h>
#include <dlfcn.h>
#include <errno.h>
#include <stdexcept>
const std::string LIB_PATH = "/data/data/com.bixense.jngl_test/lib/";
void* load_lib(const std::string& l) {
void* handle = dlopen(l.c_str(), RTLD_NOW | RTLD_GLOBAL);
if (!handle) {
throw std::runtime_error(std::string("dlopen(") + l + "): " + strerror(errno));
}
return handle;
}
void ANativeActivity_onCreate(ANativeActivity* app, void* ud, size_t udsize) {
try {
load_lib(LIB_PATH + "libogg.so");
load_lib(LIB_PATH + "libvorbis.so");
auto main = reinterpret_cast<void (*)(ANativeActivity*, void*, size_t)>(
dlsym(load_lib(LIB_PATH + "libjngl-test.so"), "ANativeActivity_onCreate")
);
if (!main) {
throw std::runtime_error("undefined symbol ANativeActivity_onCreate");
}
main(app, ud, udsize);
} catch(std::exception& e) {
__android_log_print(ANDROID_LOG_ERROR, "bootstrap", e.what());
ANativeActivity_finish(app);
}
}
Я получаю следующее сообщение об ошибке:
dlopen(/data/data/com.bixense.jngl_test/lib/libjngl-test.so): Invalid argument
Это не говорит мне, что происходит не так. Есть ли способ получить больше отладочного вывода? Что может означать «Недопустимый аргумент»?
Почему это поможет? – jhasse
, потому что вы не можете напрямую получить данные/данные/данные – blganesh101
Я могу, получил код от http://stackoverflow.com/questions/12524664/cant-load-native-shared-library-with-dependencies-in-a- native-activity-app? rq = 1, и он отлично работает для libogg.so и libvorbis.so. – jhasse