=format-security -std=c++20 -fno-limit-debug-info -static-libstdc++ -Wl,--build-...
🚨 错误信息
: && /home/SENSETIME/liming3/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi21 --sysroot=/home/SENSETIME/liming3/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -std=c++20 -fno-limit-debug-info -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--no-undefined-version -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libtestkuzucpp.so -o /data_ssd/workspace_android/testKuzuCpp/app/build/intermediates/cxx/Debug/2u3z162k/obj/armeabi-v7a/libtestkuzucpp.so CMakeFiles/testkuzucpp.dir/native-lib.cpp.o -landroid /data_ssd/workspace_android/testKuzuCpp/app/src/main/cpp/../../../../kuzu/lib/arm64-v8a/libkuzu.so -llog -latomic -lm && :
ld.lld: error: /data_ssd/workspace_android/testKuzuCpp/app/src/main/cpp/../../../../kuzu/lib/arm64-v8a/libkuzu.so is incompatible with armelf_linux_eabi
🤖 AI解决方案
ld.lld: error: /data_ssd/workspace_android/testKuzuCpp/app/src/main/cpp/../../../../kuzu/lib/arm64-v8a/libkuzu.so is incompatible with armelf_linux_eabi
ld.lld: 错误:libkuzu.so 库与 armelf_linux_eabi 架构不兼容。
原因分析
链接器 ld.lld 发现你尝试链接的 libkuzu.so 库是为 arm64-v8a (64位 ARM) 架构编译的,但你的项目目标是 armv7-a (32位 ARM)。这两种架构不兼容,导致链接失败。
解决方案
你需要使用与你的项目目标架构(armv7-a)兼容的 libkuzu.so 库。请从 Kuzu 的构建产物中找到 armv7 或 armhf 架构的库文件,并替换掉你当前使用的 arm64-v8a 版本的库。
修改链接命令中的库路径:
- /data_ssd/workspace_android/testKuzuCpp/app/src/main/cpp/../../../../kuzu/lib/arm64-v8a/libkuzu.so
+ /data_ssd/workspace_android/testKuzuCpp/app/src/main/cpp/../../../../kuzu/lib/armv7a/libkuzu.so
请确保 ../../../../kuzu/lib/armv7a/libkuzu.so 是 Kuzu 官方提供的、为 armv7-a 架构编译的库文件。
预防措施
- 交叉编译注意架构匹配:在集成第三方库时,务必确认库文件的目标架构与你的项目构建目标架构一致,避免出现架构不兼容的错误。
- 管理依赖库版本:为不同架构维护一套独立的依赖库,并在构建配置中根据目标架构正确引用,确保库的正确性。