我在尝试把Qt插件管理器架构迁移到android时,报如下错误:
I project.example: Late-enabling -Xcheck:jni
I project.example: Using CollectorTypeCC GC.
W project.example: Unexpected CPU variant for x86: x86_64.
W project.example: Known variants: atom, sandybridge, silvermont, goldmont, goldmont-plus, tremont, kabylake, default
D CompatibilityChangeReporter: Compat change id reported: 171979766; UID 10192; state: ENABLED
D CompatibilityChangeReporter: Compat change id reported: 242716250; UID 10192; state: DISABLED
W ziparchive: Unable to open '/data/app/~~1jbbhwfTiVAiyhS4nUizQg==/org.qtproject.example-q9Jj43wZPxpyZUMtOpqPNA==/base.dm': No such file or directory
W ziparchive: Unable to open '/data/app/~~1jbbhwfTiVAiyhS4nUizQg==/org.qtproject.example-q9Jj43wZPxpyZUMtOpqPNA==/base.dm': No such file or directory
D nativeloader: Configuring clns-6 for other apk /data/app/~~1jbbhwfTiVAiyhS4nUizQg==/org.qtproject.example-q9Jj43wZPxpyZUMtOpqPNA==/base.apk. target_sdk_version=31, uses_libraries=, library_path=/data/app/~~1jbbhwfTiVAiyhS4nUizQg==/org.qtproject.example-q9Jj43wZPxpyZUMtOpqPNA==/lib/x86_64:/data/app/~~1jbbhwfTiVAiyhS4nUizQg==/org.qtproject.example-q9Jj43wZPxpyZUMtOpqPNA==/base.apk!/lib/x86_64, permitted_path=/data:/mnt/expand:/data/user/0/org.qtproject.example
V GraphicsEnvironment: Currently set values for:
V GraphicsEnvironment: angle_gl_driver_selection_pkgs=[]
V GraphicsEnvironment: angle_gl_driver_selection_values=[]
V GraphicsEnvironment: ANGLE GameManagerService for org.qtproject.example: false
V GraphicsEnvironment: org.qtproject.example is not listed in per-application setting
V GraphicsEnvironment: Neither updatable production driver nor prerelease driver is supported.
D libEGL : loaded /vendor/lib64/egl/libEGL_emulation.so
D libEGL : loaded /vendor/lib64/egl/libGLESv1_CM_emulation.so
D libEGL : loaded /vendor/lib64/egl/libGLESv2_emulation.so
W System : ClassLoader referenced unknown path:
I QtCore : Start
I Qt : qt started
E AndroidRuntime: FATAL EXCEPTION: qtMainLoopThread
E AndroidRuntime: Process: org.qtproject.example, PID: 31932
E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "libQt6Core5Compat_x86_64.so" not found: needed by /data/app/~~1jbbhwfTiVAiyhS4nUizQg==/org.qtproject.example-q9Jj43wZPxpyZUMtOpqPNA==/lib/x86_64/libExtensionSystem_x86_64.so in namespace clns-6
E AndroidRuntime: at java.lang.Runtime.load0(Runtime.java:933)
E AndroidRuntime: at java.lang.System.load(System.java:1625)
E AndroidRuntime: at org.qtproject.qt.android.QtNative$4.run(QtNative.java:305)
E AndroidRuntime: at org.qtproject.qt.android.QtThread$2.run(QtThread.java:51)
E AndroidRuntime: at org.qtproject.qt.android.QtThread$1.run(QtThread.java:25)
E AndroidRuntime: at java.lang.Thread.run(Thread.java:1012)
I Process : Sending signal. PID: 31932 SIG: 9
20:47:15:
"org.qtproject.example" died.
已在qmake中配置过相关的库。
LIBS *= \
-l$$qtLibraryName(ExtensionSystem) \
-l$$qtLibraryName(Stl) \
-l$$qtLibraryName(AbsCondInfo) \
contains(ANDROID_TARGET_ARCH,x86_64) {
ANDROID_PACKAGE_SOURCE_DIR = \
$$PWD/android
message("@@@@ ANDROID_ABIS : $${ANDROID_ABIS}")
ANDROID_EXTRA_LIBS += \
$$PWD/android/libs/libExtensionSystem_x86_64.so \
$$PWD/android/libs/libStl_x86_64.so \
$$PWD/android/libs/libAbsCondInfo_x86_64.so \
$$PWD/android/libs/plugins/debug/libTemplate_x86_64.so \
}
apk包中也有相关的库libExtensionSystem_x86_64.so
x86_64虚拟机运行时中报错:
E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "libQt6Core5Compat_x86_64.so" not found: needed by /data/app/~~1jbbhwfTiVAiyhS4nUizQg==/org.qtproject.example-q9Jj43wZPxpyZUMtOpqPNA==/lib/x86_64/libExtensionSystem_x86_64.so in namespace clns-6
各位看看问题出在哪里
找不带库或者没有配置正确
把动态库放到运行路径下试试
android 加载动态库不成功,Android加载动态库失败分析
可以参考下
https://blog.csdn.net/weixin_39965102/article/details/117347017
这个错误表明在 x86_64 虚拟机运行时中,系统无法找到所需的动态链接库文件 "libQt6Core5Compat_x86_64.so"。检查你的应用中是否缺少了 "libQt6Core5Compat_x86_64.so" 文件。
检查你的应用中是否正确设置了 Qt 库的路径。你需要确保系统能够正确地找到 Qt 库文件,包括 "libQt6Core5Compat_x86_64.so"。你可以在应用的 build.gradle 文件中设置 Qt 库的路径,或者在运行时通过设置环境变量或使用其他方法来指定库文件的路径。
检查你使用的 Qt 版本是否与你的应用兼容。如果你使用的是较新的 Qt 版本,可能需要更新你的应用以适应新版本的 Qt。
libQt6Core5Compat_x86_64.so这个动态链接库没有正确配置好
基于new bing部分指引作答:
根据您提供的错误信息,问题出在加载 libQt6Core5Compat_x86_64.so 库时失败,该库是由 libExtensionSystem_x86_64.so 所需要的。下面是一些可能的解决方案:
1、检查库文件路径:确保 libQt6Core5Compat_x86_64.so 库存在于正确的路径中,即 /data/app/~~1jbbhwfTiVAiyhS4nUizQg==/org.qtproject.example-q9Jj43wZPxpyZUMtOpqPNA==/lib/x86_64/。您可以在设备或模拟器上手动检查该路径是否包含所需的库文件。
2、检查库文件名:确保库文件名正确且大小写匹配。在Android上,库文件名对大小写敏感。
3、检查库文件依赖:确保 libQt6Core5Compat_x86_64.so 及其所依赖的其他库都存在并可访问。检查库文件的依赖关系,确保所有依赖的库都正确加载。
4、检查权限和访问性:确保应用程序具有访问库文件的适当权限。这可能涉及到在AndroidManifest.xml文件中声明所需的权限。
5、清理和重新构建:尝试清理并重新构建您的项目,以确保最新的库文件正确地打包到apk包中。
6、检查构建设置:确认您的构建设置中没有任何错误或缺失的库文件路径。确保在构建过程中将库文件复制到正确的位置。
通过排除上述问题,您应该能够解决库加载失败的问题。
来自GPT的回答:
根据错误信息 java.lang.UnsatisfiedLinkError,可以看出问题是在加载动态库 libExtensionSystem_x86_64.so 时发生了错误,原因是找不到依赖的库 libQt6Core5Compat_x86_64.so。
要解决这个问题,可以尝试以下几个步骤:
确保 libQt6Core5Compat_x86_64.so 存在:检查你的构建环境中是否存在 libQt6Core5Compat_x86_64.so 动态库文件,并且文件路径正确。确保它与 libExtensionSystem_x86_64.so 位于相同的文件夹或正确的搜索路径下。
检查库的加载顺序:确保在加载 libExtensionSystem_x86_64.so 之前,libQt6Core5Compat_x86_64.so 已经被加载。检查你的代码或构建脚本,确保依赖库的加载顺序是正确的。
检查库的命名和版本:确认你使用的 libQt6Core5Compat_x86_64.so 与目标平台和Qt版本兼容。可能需要检查库的命名约定和版本信息,确保它们匹配你的构建环境。
检查库的链接方式:如果你自己编译了 libQt6Core5Compat_x86_64.so 和 libExtensionSystem_x86_64.so,确保它们使用相同的链接方式(静态链接或动态链接)。如果两个库使用不同的链接方式,可能会导致加载错误。
检查库的依赖关系:使用工具如 readelf 或 objdump 来检查 libExtensionSystem_x86_64.so 的依赖关系,确认是否有其他依赖库缺失或未正确链接。确保所有的依赖库都可用且正确配置。
通过检查以上步骤,你应该能够找到问题所在并解决加载动态库失败的问题。如果问题仍然存在,可能需要更详细的调试和排查。
根据报错信息,问题出在加载库文件"libQt6Core5Compat_x86_64.so"时失败,这是由于该库文件在运行时无法找到导致的。可能有几个原因导致这个问题:
库文件路径问题:请确保"libQt6Core5Compat_x86_64.so"库文件的路径是正确的,并且可以在运行时访问。可以检查路径是否正确,以及权限是否设置正确。
缺少依赖库:库文件"libQt6Core5Compat_x86_64.so"可能依赖于其他库文件,确保这些依赖库也在正确的位置,并且可以在运行时找到。可以检查库文件的依赖关系,并确保所有依赖库都可用。
架构匹配问题:确认目标设备的架构与库文件匹配。根据报错信息,你的设备架构是x86_64,因此需要确保使用正确的库文件,适用于x86_64架构。
编译配置问题:请确保在编译过程中正确地配置了相关库文件的路径和名称。检查编译脚本或构建配置文件,确保正确设置了库文件的位置和名称。
另外,检查一下构建的APK包中是否包含所需的库文件,并确认文件的大小和日期与你提供的信息一致。
如果问题仍然存在,可能需要更多的上下文和细节来进一步诊断问题。
问题可能出在以下几个方面:
库文件路径错误:检查一下路径/data/app/~~1jbbhwfTiVAiyhS4nUizQg==/org.qtproject.example-q9Jj43wZPxpyZUMtOpqPNA==/lib/x86_64/下是否存在libQt6Core5Compat_x86_64.so文件。确保库文件的路径正确,并且应该与你在qmake中配置的路径相匹配。
库文件依赖问题:检查一下libExtensionSystem_x86_64.so这个库文件是否正确地链接了libQt6Core5Compat_x86_64.so。在libExtensionSystem_x86_64.so的编译过程中,确保将libQt6Core5Compat_x86_64.so正确地链接到了该库中。
ABI兼容性问题:根据错误日志,可能是因为目标设备的CPU架构与项目中使用的ABI不匹配导致的。请确保你的项目中使用的ABI与目标设备的CPU架构相匹配。例如,如果目标设备的CPU架构是x86_64,那么你的APK包中应包含对应的x86_64架构的库文件。
请检查上述几个方面,看看是否能解决您的问题。如果问题仍然存在,请提供更多的详细信息,以便我们能够更好地帮助您解决问题。
以下答案参考newbing,回答由博主波罗歌编写:
该错误发生在尝试加载动态库文件时,找不到名为"libQt6Core5Compat_x86_64.so"的库。解决这个问题的一种可能的方法是确认库文件的正确性和路径。
首先,确认以下几点:
如果确认上述步骤均正确,但仍然无法解决问题,你可以尝试以下方法:
contains(ANDROID_TARGET_ARCH,x86_64) {
ANDROID_EXTRA_LIBS += \
$$PWD/android/libs/x86_64/libQt6Core5Compat.so
}
检查Qt版本和目标SDK版本之间的兼容性。确认你正在使用的Qt版本支持目标SDK版本。
重新构建和部署你的应用程序,确保库文件被正确地打包和部署到设备。
希望以上的解决方案能帮助你解决问题。如果问题仍然存在,请提供更多的详细信息,例如Qt和Android的版本和配置,以便我们能够更好地帮助你。
如果我的回答解决了您的问题,请采纳!