android源码编译错误make ***[out/host/linux-x86/obj/EXECUTABLE/llvm-rs-cc_intermediates/llvm-rs-cc] Error 1

在Ubuntu 12 64位系统,2G内存环境中编译Android源码时遇到'Waiting for unfinished jobs...'错误。尝试增加交换区、单线程make均未解决问题。最终通过'make clean'清除旧文件,再用单线程'make'命令成功编译完成。低配置电脑建议使用单线程编译,避免内存不足导致的错误。完成编译后,启动模拟器时初遇'emulator'命令找不到,通过执行'source build/envsetup.sh'和'lunch full-eng'命令后,模拟器成功运行。

系统是Ubuntu12 64位,2G内存,编译的时候出现下面这个错误:

make: *** [out/host/linux-x86/obj/EXECUTABLES/llvm-rs-cc_intermediates/llvm-rs-cc] Error 1

make: *** Waiting for unfinished jobs….[/color]

之后在网上查了好久好久,没找到什么解决办法,尝试更改交换区使用率,用单线程make,都不行。

在快要放弃的情况下,在某篇帖子上看到make clean这么个东西,就死马当活马医了,执行命令后,out目录就被clean掉了

之后用单线程make命令(就是单纯make, 后面不跟-j参数),一直编译,没出什么错误,大约编译了五六个小时,出现了如下信息;

Generated: (out/target/product/generic/android-info.txt)
Installed file list: out/target/product/generic/installed-files.txt
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install system fs image: out/target/product/generic/system.img

Execution failed for task ':app_rknn_face_demp:buildCMakeDebug[arm64-v8a]'. > com.android.ide.common.process.ProcessException: ninja: Entering directory `D:\AndroidProject\Application_721_rknn\app_rknn_face_demp\.cxx\Debug\4q243e49\arm64-v8a' [1/1] Linking CXX shared library ..\..\..\..\build\intermediates\cxx\Debug\4q243e49\obj\arm64-v8a\librknn4j.so FAILED: ../../../../build/intermediates/cxx/Debug/4q243e49/obj/arm64-v8a/librknn4j.so cmd.exe /C "cd . && C:\Users\16270\AppData\Local\Android\Sdk\ndk\23.1.7779620\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android24 --sysroot=C:/Users/16270/AppData/Local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -std=c++11 -fexceptions -g -fno-limit-debug-info -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--fatal-warnings -Qunused-arguments -Wl,--no-undefined -shared -Wl,-soname,librknn4j.so -o ..\..\..\..\build\intermediates\cxx\Debug\4q243e49\obj\arm64-v8a\librknn4j.so CMakeFiles/rknn4j.dir/src/main/cpp/native-lib.cc.o -Wl,--no-undefined ../../../../src/main/jniLibs/arm64-v8a/librknnrt.so ../../../../src/main/jniLibs/arm64-v8a/libRKFace.so ../../../../src/main/jniLibs/arm64-v8a/libnva.so ../../../../src/main/jniLibs/arm64-v8a/libc++_shared.so ../../../../src/main/jniLibs/arm64-v8a/libsunchip_rknn.so C:/Users/16270/AppData/Local/Android/Sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/aarch64-linux-android/24/liblog.so -static-libstdc++ -latomic -lm && cd ." ld: error: found local symbol '__bss_start' in global part of symbol table in file ../../../../src/main/jniLibs/arm64-v8a/libsunchip_rknn.so ld: error: found local symbol '_edata' in global part of symbol table in file ../../../../src/main/jniLibs/arm64-v8a/libsunchip_rknn.so ld: error: found local symbol '_end' in global part of symbol table in file ../../../../src/main/jniLibs/arm64-v8a/libsunchip_rknn.so clang++: error: linker command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed. 这是什么报错
06-14
我有一份C代码,配置文件如CMakeLists.txt: cmake_minimum_required(VERSION 3.4.1) project(RKFace VERSION 1.0.0) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 基本编译选项 set(CMAKE_C_FLAGS "-Wall -fPIC -O2") set(CMAKE_CXX_FLAGS "-Wall -fPIC -O2") # Android 平台配置 if(CMAKE_SYSTEM_NAME STREQUAL "Android") add_definitions(-DANDROID) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") endif() # 包含目录 include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/include src/rknn_sunchip.h ) # 源文件 set(main_source src/cmain.cc) # 库文件路径 set(LIBPATH ${CMAKE_CURRENT_SOURCE_DIR}/libs/android) # 链接库 set(LINKS ${LIBPATH}/libRKFace.so ${LIBPATH}/libnva.so ${LIBPATH}/librknnrt.so ) # Android 特定库 if(CMAKE_SYSTEM_NAME STREQUAL "Android") list(APPEND LINKS log c++_shared) endif() # 标准库 list(APPEND LINKS c m dl) # 生成可执行文件 add_executable(rkface.demo ${main_source}) # 链接库 target_link_libraries(rkface.demo ${LINKS}) # 设置安装目录为当前目录下的 install set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/install) # 定义共享库 sunchip_rknn add_library(sunchip_rknn SHARED src/rknn_sunchip.c ) # 设置符号可见性控制 target_compile_options(sunchip_rknn PRIVATE -fvisibility=hidden # 隐藏所有符号 -fno-builtin # 防止内置符号冲突 ) # 定义导出宏 target_compile_definitions(sunchip_rknn PRIVATE -DAPI_EXPORT=__attribute__\(\(visibility\(\"default\"\)\)\) ) # 添加链接器选项 target_link_options(sunchip_rknn PRIVATE "-Wl,--exclude-libs=ALL" # 隐藏依赖库符号 "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/version_script.map" ) # 将包含目录添加到 yolov8_pose 库 target_include_directories(sunchip_rknn PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/rknn_sunchip.h ) # 安装可执行文件到 install/bin install(TARGETS rkface.demo RUNTIME DESTINATION bin) # 安装库文件到 install/lib install(FILES ${LIBPATH}/libRKFace.so ${LIBPATH}/libnva.so ${LIBPATH}/librknnrt.so DESTINATION lib ) # 安装头文件到 install/include (如果需要) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION include FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp" ) # 安装共享库 install(TARGETS sunchip_rknn RUNTIME DESTINATION lib) 但是我生成出来的sunchip_rknn库导入android studio以后报错无法找到rknn_sunchip.h 内部的方法,报错如下:Execution failed for task ':app_rknn_face_demp:buildCMakeDebug[arm64-v8a]'. > com.android.ide.common.process.ProcessException: ninja: Entering directory `D:\AndroidProject\Application_721_rknn\app_rknn_face_demp\.cxx\Debug\6n3i5l6d\arm64-v8a' [1/2] Building CXX object CMakeFiles/rknn4j.dir/src/main/cpp/native-lib.cc.o [2/2] Linking CXX shared library ..\..\..\..\build\intermediates\cxx\Debug\6n3i5l6d\obj\arm64-v8a\librknn4j.so FAILED: ../../../../build/intermediates/cxx/Debug/6n3i5l6d/obj/arm64-v8a/librknn4j.so cmd.exe /C "cd . && C:\Users\16270\AppData\Local\Android\Sdk\ndk\25.2.9519653\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android24 --sysroot=C:/Users/16270/AppData/Local/Android/Sdk/ndk/25.2.9519653/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -std=c++11 -fexceptions -fno-limit-debug-info -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,librknn4j.so -o ..\..\..\..\build\intermediates\cxx\Debug\6n3i5l6d\obj\arm64-v8a\librknn4j.so CMakeFiles/rknn4j.dir/src/main/cpp/native-lib.cc.o -Wl,--no-undefined ../../../../src/main/jniLibs/arm64-v8a/libsunchip_rknn.so ../../../../src/main/jniLibs/arm64-v8a/librknnrt.so ../../../../src/main/jniLibs/arm64-v8a/libRKFace.so ../../../../src/main/jniLibs/arm64-v8a/libnva.so ../../../../src/main/jniLibs/arm64-v8a/libc++_shared.so C:/Users/16270/AppData/Local/Android/Sdk/ndk/25.2.9519653/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/aarch64-linux-android/24/liblog.so -latomic -lm && cd ." ld: error: undefined symbol: sunchip_face_init >>> referenced by native-lib.cc:10 (D:/AndroidProject/Application_721_rknn/app_rknn_face_demp/src/main/cpp/native-lib.cc:10) >>> CMakeFiles/rknn4j.dir/src/main/cpp/native-lib.cc.o:(Java_com_rockchip_gpadc_demo_yolo_InferenceWrapper_native_1inityolov8) clang++: error: linker command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed.
最新发布
06-17
<think>嗯,用户遇到了在Ubuntu18上编译AOSP9时出现aapt编译失败的特定错误,需要针对性解决方案。从提交的引用内容看,用户已经收集了相关线索:引用1提到64位环境下缺少32位兼容库的问题;引用2和引用3分别涉及X11头文件缺失和flex工具兼容性问题;引用4则暗示64位环境编译32位目标时的库文件链接问题。结合这些线索和用户当前具体的失败点(out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/Main.o),问题可能集中在三个方面:首先是64位环境对32位编译的支持不足,其次是编译工具链的依赖缺失,最后可能是环境变量设置不当。尤其值得注意的是aapt工具在编译过程中会调用很多本地库,而X11开发库(libx11-dev)的缺失在引用2中已被证实会导致类似错误。用户的上个问题询问的是整个AOSP9编译流程,这次则聚焦在具体模块编译失败,说明用户已进入实际编译阶段且卡在工具链构建环节。考虑到aapt是资源打包的关键工具,这个问题必须优先解决。需要提供阶梯式解决方案:先检查基础依赖,再验证工具链,最后处理可能的符号链接问题。特别要注意引用3提到的flex工具崩溃案例,虽然错误信息不同,但同样是工具链问题。用户环境可能存在多种编译工具版本冲突,因此需要确认flex和bison的版本兼容性。此外,引用4暗示的32位库链接问题非常关键,因为AOSP9的host工具仍包含32位组件,解决方案中必须包含多架构支持检查和32位库安装验证。对于这个具体错误,最直接的突破口应该是:1)确保所有64位+32位混合编译依赖已安装(如ia32-libs替代方案)2)检查SDL/X11头文件是否存在3)验证libstdc++的32位符号链接分步验证的方式能帮助用户精准定位缺失环节。</think> 针对Ubuntu 18编译AOSP 9时`FAILED: out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/Main.o`错误,请按以下步骤解决: --- ### **解决方案** #### **1. 安装32位兼容库(关键步骤)** ```bash sudo apt-get update # 安装多架构支持 sudo dpkg --add-architecture i386 # 安装核心32位库 sudo apt-get install libc6:i386 libstdc++6:i386 zlib1g:i386 # 安装开发依赖项 sudo apt-get install gcc-multilib g++-multilib lib32z1-dev libx11-dev:i386 ``` > **说明**:AOSP工具链含32位组件,需32位运行库支持[^1][^4] #### **2. 验证库文件链接** ```bash # 检查32位库链接(重点确认libstdc++) ls -l /usr/lib/i386-linux-gnu/libstdc++* # 若缺失链接,手动创建(需root权限) sudo ln -s /usr/lib/i386-linux-gnu/libstdc++.so.6 /usr/lib/i386-linux-gnu/libstdc++.so ``` #### **3. 修复X11头文件缺失** ```bash # 安装X11开发包(解决Xlib.h报错[^2]) sudo apt-get install libx11-dev libxext-dev libxtst-dev ``` #### **4. 清理并重试编译** ```bash # 清除错误编译缓存 make clean # 单线程重试编译(定位问题) make -j1 aapt ``` > 成功后恢复并行编译:`make -j$(nproc)` --- ### **进阶排查** 若仍失败,检查以下位置: 1. **编译日志细节** ```bash # 查看完整报错信息 cat out/error.log | grep -C 10 "Main.o" ``` 2. **Python环境验证** ```bash # 确认使用Python2(AOSP9强制要求) export PYTHON_VERSION=python2.7 python --version ``` 3. **内存限制调整** ```bash # 防止OOM崩溃(特别是<32GB内存设备) export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m" ./prebuilts/sdk/tools/jack-admin kill-server ./prebuilts/sdk/tools/jack-admin start-server ``` --- ### **预防措施** ```diff # 完整依赖清单(新增32位相关包) sudo apt install libc6-dev-i386 lib32stdc++6 lib32z1-dev \ + libx11-dev:i386 lib32ncurses5-dev gcc-multilib g++-multilib ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值