HarmonyOS 鸿蒙Next OpenHarmony Deveco Studio更新3.1.200版本NativeC++应用引用第三方arm64-v8a库,编译报“ld.lld:error is incompatible with elf_x86_64”
HarmonyOS 鸿蒙Next OpenHarmony Deveco Studio更新3.1.200版本NativeC++应用引用第三方arm64-v8a库,编译报“ld.lld:error is incompatible with elf_x86_64” 做OpenHarmony设备应用开发,Deveco Statio更新3.1.200版本NativeC++应用引用第三方arm64-v8a库,编译报“ld.lld:error is incompatible with elf_x86_64”,以前是没问题的同时OpenHarmony_SDK也升级到了3.2.10.6 beta5版本。
没更新之前工程编译是正常,另外编译报错如下:
[2/2] Linking CXX shared library E:\2_ProgramTool\GRXXXMDev_ArkTS\Src\GrXXXMDev_ArkTs\entry\build\default\intermediates\cmake\default\obj\x86_64\libGRXXXMDev_napi.so
FAILED: E:/2_ProgramTool/GRXXXMDev_ArkTS/Src/GrXXXMDev_ArkTs/entry/build/default/intermediates/cmake/default/obj/x86_64/libGRXXXMDev_napi.so
cmd.exe /C "cd . && E:\2_ProgramTool\SDK_OpenHarmony\9\native\llvm\bin\clang++.exe --target=x86_64-linux-ohos --gcc-toolchain=E:/2_ProgramTool/SDK_OpenHarmony/9/native/llvm --sysroot=E:/2_ProgramTool/SDK_OpenHarmony/9/native/sysroot -fPIC -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-precedes -fno-addrsig -Wa,--noexecstack -Wformat -Werror=format-security -D__MUSL__ -O0 -g -fno-limit-debug-info --rtlib=compiler-rt -fuse-ld=lld -Wl,--build-id=sha1 -Wl,--warn-shared-textrel -Wl,--fatal-warnings -lunwind -Wl,--no-undefined -Qunused-arguments -Wl,-z,noexecstack -shared -Wl,-soname,libGRXXXMDev_napi.so -o E:\2_ProgramTool\GRXXXMDev_ArkTS\Src\GrXXXMDev_ArkTs\entry\build\default\intermediates\cmake\default\obj\x86_64\libGRXXXMDev_napi.so CMakeFiles/GRXXXMDev_napi.dir/GRXXXMDev_napi.cpp.o -LE:/2_ProgramTool/GRXXXMDev_ArkTS/Src/GrXXXMDev_ArkTs/entry/src/main/cpp/lib/arm64-v8a -Wl,-rpath,E:/2_ProgramTool/GRXXXMDev_ArkTS/Src/GrgXXXDev_ArkTs/entry/src/main/cpp/lib/arm64-v8a -lace_napi.z -lhilog_ndk.z -lunionpaycard -lm && cd ."
ld.lld: error: E:/2_ProgramTool/GRXXXMDev_ArkTS/Src/GrXXXMDev_ArkTs/entry/src/main/cpp/lib/arm64-v8a\libunionpaycard.so is incompatible with elf_x86_64
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
在出现这个问题后做了以下尝试:
- 清空工程下.cxx和build文件夹中后重新编译,无效,仍报错elf_x86_64;
- 检查configuration文件夹中的build-profile.json5中的abiFilters是不是限定了arm64-v8a如下,发现了已经限定了,但是cmake还是会默认编译出x86_64文件夹,同同时依旧报错,希望官方看是否怎么处理或者优化一下。
{
"apiType": 'stageMode',
"buildOption": {
"externalNativeOptions": {
"path": "./src/main/cpp/CMakeLists.txt",
"arguments": "",
"abiFilters": [
"arm64-v8a"
],
"cppFlags": ""
}
},
"targets": [
{
"name": "default"
},
{
"name": "ohosTest",
}
]
}
更多关于HarmonyOS 鸿蒙Next OpenHarmony Deveco Studio更新3.1.200版本NativeC++应用引用第三方arm64-v8a库,编译报“ld.lld:error is incompatible with elf_x86_64”的实战教程也可以访问 https://www.itying.com/category-93-b0.html
将package.json中的hvigor-ohos-plugin版本改为1.4.1后再同步编译再试试!
更多关于HarmonyOS 鸿蒙Next OpenHarmony Deveco Studio更新3.1.200版本NativeC++应用引用第三方arm64-v8a库,编译报“ld.lld:error is incompatible with elf_x86_64”的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
早上我把Deveco Statio版本降回到3.1.100版本,然后修改了package.json这个地方为:
{
"dependencies": {
"@ohos/hypium": "1.0.3",
"@ohos/hvigor-ohos-plugin": "1.3.1",
"@ohos/hvigor": "1.3.1"
}
}
就可以正常编译了。
感谢您的反馈,如后期有疑问可以随时发帖,感谢您的支持。
针对您提到的HarmonyOS鸿蒙Next OpenHarmony Deveco Studio更新3.1.200版本后,Native C++应用引用第三方arm64-v8a库时编译报错“ld.lld: error is incompatible with elf_x86_64”的问题,这通常是由于目标架构与库文件架构不匹配所致。
在鸿蒙系统中,如果您的应用是针对arm64架构(如arm64-v8a),则必须确保所有引用的库文件也是为arm64架构编译的。报错信息“elf_x86_64”表明链接器尝试链接一个为x86_64架构编译的库,这与您的目标架构arm64-v8a不兼容。
解决此问题的步骤如下:
- 确认您的应用目标架构是arm64-v8a。
- 检查引用的第三方库文件是否也是为arm64-v8a架构编译的。如果不是,您需要找到或重新编译适用于arm64-v8a架构的库文件。
- 在Deveco Studio中,确保项目配置正确指向了适用于arm64-v8a架构的库文件。
如果上述步骤正确无误,但问题依旧存在,可能是构建配置或环境设置有误。此时,请检查您的构建脚本和IDE设置,确保没有错误地引用了x86_64架构的库。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html,