运行QT程序报错 is an invalid ELF object

运行QT程序时遇到'is an invalid ELF object'错误,通过检查报错日志发现库文件可能损坏。解决方案是重新将库文件libqeglfs.so和libqlinuxfb.so使用adb push推送到设备,并成功执行程序。
摘要由CSDN通过智能技术生成

运行QT程序报错 is an invalid ELF object

首先上报错log

root@TinaLinux:/# cd usr/share/qt5/examples/gui/analogclock/
root@TinaLinux:/usr/share/qt5/examples/gui/analogclock# ./analogclock 
QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/qt5/plugins" ...
QFactoryLoader::QFactoryLoader() checking directory path "/usr/share/qt5/examples/gui/analogclock" ...
QFactoryLoader::QFactoryLoader() looking at "/usr/share/qt5/examples/gui/analogclock/analogclock"
QElfParser: '/usr/share/qt5/examples/gui/analogclock/analogclock' is an invalid ELF object (shstrtab section header seems to be 
如果在JNI中使用 `jobject` 类型的变量作为回调方法的参数,需要注意在调用Java回调方法之前,需要使用 `env->NewGlobalRef()` 函数将 `jobject` 对象创建为全局引用。这是因为在回调方法调用结束后,JNI环境可能会将本地引用释放掉,如果不将 `jobject` 对象创建为全局引用,就会导致回调方法的参数变成无效引用。 因此,在您的示例代码中,您需要将 `jobj` 对象创建为全局引用,示例如下: ```c++ // 将 void* 转换为 jobject void* voidPtr = ...; jobject jobj = reinterpret_cast<jobject>(voidPtr); // 创建全局引用 jobject globalObj = env->NewGlobalRef(jobj); // 获取Java对象和回调方法信息 JNIEnv* env = ...; jclass clazz = env->GetObjectClass(obj); jmethodID callbackMethodID = env->GetMethodID(clazz, "callback", "(Ljava/lang/Object;)V"); // 调用Java回调方法 env->CallVoidMethod(callbackObj, callbackMethodID, globalObj); // 释放资源 env->DeleteLocalRef(clazz); env->DeleteGlobalRef(globalObj); ``` 在这个示例中,我们在调用Java回调方法之前,使用 `env->NewGlobalRef()` 函数将 `jobj` 对象创建为全局引用 `globalObj`。接着,我们调用Java回调方法,并将 `globalObj` 作为参数传递给它。最后,释放资源,包括删除本地引用和全局引用。 需要注意的是,使用 `env->NewGlobalRef()` 函数创建全局引用会占用更多的内存,因此需要在不需要使用全局引用时,使用 `env->DeleteGlobalRef()` 函数将其释放掉。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值