binder编译error

本文详细解析了在Android应用开发过程中遇到的Binder服务编译错误问题,包括错误产生的原因以及如何解决这些问题,特别是针对未实现BpTestBinderService,以及无法分配抽象类型'android::TvssService'的情况提供了有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、自己写个binderservice,编译老是报错

make: Entering directory `/home/leaves/android/android2/android'
target thumb C++: libTestBinderServer <= frameworks/tv_print/services/TestBinderServer/TestBinderService.cpp
target SharedLib: libTestBinderServer (out/target/product/generic/obj/SHARED_LIBRARIES/libTestBinderServer_intermediates/LINKED/libTestBinderServer.so)
out/target/product/generic/obj/SHARED_LIBRARIES/libTestBinderServer_intermediates/TestBinderService.o: In function `android::BnInterface<android::ITestBinderService>::getInterfaceDescriptor() const':
/home/leaves/android/android2/android/frameworks/base/include/binder/IInterface.h:125: undefined reference to `android::ITestBinderService::getInterfaceDescriptor() const'
out/target/product/generic/obj/SHARED_LIBRARIES/libTestBinderServer_intermediates/TestBinderService.o: In function `~BnInterface':
/home/leaves/android/android2/android/frameworks/base/include/binder/IInterface.h:51: undefined reference to `android::ITestBinderService::~ITestBinderService()'
/home/leaves/android/android2/android/frameworks/base/include/binder/IInterface.h:51: undefined reference to `android::ITestBinderService::~ITestBinderService()'
out/target/product/generic/obj/SHARED_LIBRARIES/libTestBinderServer_intermediates/TestBinderService.o: In function `~BnTestBinderService':
/home/leaves/android/android2/android/frameworks/tv_print/services/TestBinderServer/ITestBinderService.h:20: undefined reference to `vtable for android::BnTestBinderService'
/home/leaves/android/android2/android/frameworks/tv_print/services/TestBinderServer/ITestBinderService.h:20: undefined reference to `VTT for android::BnTestBinderService'
out/target/product/generic/obj/SHARED_LIBRARIES/libTestBinderServer_intermediates/TestBinderService.o: In function `~BnInterface':
/home/leaves/android/android2/android/frameworks/base/include/binder/IInterface.h:51: undefined reference to `android::ITestBinderService::~ITestBinderService()'
out/target/product/generic/obj/SHARED_LIBRARIES/libTestBinderServer_intermediates/TestBinderService.o: In function `~BnTestBinderService':

应该是没有实现BpTestBinderService,而是只实现了BnTestBinderService及TestBinderService


2、

error: cannot allocate an object of abstract type 'android::TvssService'

这个应该是由于在基类中申明的虚函数,在派生类中必须继承并实现,有虚函数没有实现或者参数不一致造成的。

编译 Android 相关的 native 代码时,如果遇到 `ld.lld: error: undefined symbol: android::hardware::details::return_status::~return_status()` 这类链接错误,通常表明链接器无法找到特定符号的定义。该符号是 `android::hardware::details::return_status` 类的析构函数。 ### 可能的原因及解决方案 #### 1. 缺少依赖库 最常见的原因是项目有正确链接到包含此符号的库。`android::hardware::details::return_status` 是 Android 框架的一部分,通常与硬件抽象层(HAL)相关。确保项目中包含了正确的依赖项,尤其是在使用 AOSP 或自定义 ROM 的情况下。可以在 `Android.mk` 或 `Android.bp` 文件中添加相应的共享库依赖: ```makefile LOCAL_SHARED_LIBRARIES += libandroid ``` 或者,在 `Android.bp` 中添加: ```starlark shared_libs: ["libandroid"], ``` 这将确保链接器能够找到所需的符号[^1]。 #### 2. 使用错误的构建配置 有时,构建系统可能未正确配置以包含必要的头文件或库路径。检查构建环境是否设置为针对正确的架构和平台版本。例如,在 Soong 构建系统中,确保目标架构(如 `arm64`)被正确指定,并且构建变体(如 `userdebug` 或 `eng`)与所需的功能匹配。 #### 3. 源码版本不一致 如果你正在基于某个特定版本的 Android 源码进行开发,请确认你所使用的源码分支与目标设备的系统镜像一致。不同版本之间的 API 变化可能导致某些符号不可用,进而导致链接失败。可以通过更新源码树至最新提交或切换到合适的标签来解决此类问题[^1]。 #### 4. 自定义 HAL 实现问题 如果你的应用涉及自定义 HAL 实现,则需要确保所有相关的接口定义语言(IDL)文件已被正确处理,并生成了对应的 stub 和 binder 包装类。此外,还需要验证服务注册逻辑是否完整,以及客户端和服务端之间的通信是否正常工作。 #### 5. 工具链问题 在极少数情况下,工具链本身的缺陷也可能导致此类错误。尝试更新你的编译器、链接器及相关工具至最新版本,以排除因旧版软件引起的问题。对于使用 Clang 的项目,可以考虑升级 LLVM 工具链;而对于 GCC 用户,则应获取最新的 GNU 编译器集合版本[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值