device/hisilicon/bigfish/hippo/include/hi_mw_log.h:77:53: note: expanded from macro 'LOGI' #define LOGI(...) ((void)LOG(ATV_LOG_INFO, LOG_TAG, __VA_ARGS__)) ^~~~~~~~~~~ device/hisilicon/bigfish/hippo/include/hi_mw_log.h:122:33: note: expanded from macro 'LOG' atv_printLog(priority, tag, __VA_ARGS__) ^~~~~~~~~~~ device/hisilicon/bigfish/hippo/include/hi_mw_log.h:131:56: note: expanded from macro 'atv_printLog' HiLog::PrintLog(prio, tag, __FUNCTION__, __LINE__, fmt) ^~~ device/hisilicon/bigfish/hippo/vendor/ZYCustom/modules/Orientation.cpp:319:14: warning: expression result unused [-Wunused-value] for(i;i<=sizeof(accelerations_mean_array)/sizeof(accelerations_mean_array[0]);i++){ ^ device/hisilicon/bigfish/hippo/vendor/ZYCustom/modules/Orientation.cpp:319:17: warning: comparison of integers of different signs: 'int' and 'unsigned int' [-Wsign-compare] for(i;i<=sizeof(accelerations_mean_array)/sizeof(accelerations_mean_array[0]);i++){ ~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ device/hisilicon/bigfish/hippo/vendor/ZYCustom/modules/Orientation.cpp:337:1: error: control may reach end of non-void function [-Werror,-Wreturn-type]
时间: 2023-07-05 08:29:30 浏览: 295
这是一段代码的编译警告和错误信息。
首先是一个宏定义,展开后是打印Log信息的函数调用,其中第一个参数是Log的等级,第二个参数是Log的Tag,后面的__VA_ARGS__是可变参数,表示需要打印的Log信息。
接下来是一个for循环,其中i的类型为int,在循环条件中使用了sizeof操作符获取数组长度,需要注意sizeof的返回值类型是unsigned int,导致了类型不匹配,编译器给出了警告。
最后是一个函数定义,编译器提示该函数可能没有返回值,需要加上返回值或者在函数结尾加上return语句。
相关问题
mpi_aenc.c:(.text.HI_MPI_AENC_SendFrame+0x674):对‘HI_UPVQE_GetConfig’未定义的引用 mpi_aenc.c:(.text.HI_MPI_AENC_SendFrame+0x904):对‘HI_UPVQE_GetConfig’未定义的引用 mpi_aenc.c:(.text.HI_MPI_AENC_SendFrame+0x9d8):对‘HI_UPVQE_WriteFrame’未定义的引用 mpi_aenc.c:(.text.HI_MPI_AENC_SendFrame+0xa28):对‘HI_UPVQE_ReadFrame’未定义的引用 HIlib/libmpi.a(mpi_ai.o):在函数‘MPI_AI_GetVqeAttr’中: mpi_ai.c:(.text.MPI_AI_GetVqeAttr+0x9c):对‘HI_UPVQE_GetConfig’未定义的引用 HIlib/libmpi.a(mpi_ai.o):在函数‘MPI_AI_EnableReSmp’中: mpi_ai.c:(.text.MPI_AI_EnableReSmp+0x138):对‘HI_UPVQE_Destroy’未定义的引用 mpi_ai.c:(.text.MPI_AI_EnableReSmp+0x150):对‘HI_UPVQE_Create’未定义的引用 HIlib/libmpi.a(mpi_ai.o):在函数‘MPI_AI_DisableReSmp’中: mpi_ai.c:(.text.MPI_AI_DisableReSmp+0x158):对‘HI_UPVQE_Destroy’未定义的引用 mpi_ai.c:(.text.MPI_AI_DisableReSmp+0x170):对‘HI_UPVQE_Create’未定义的引用 mpi_ai.c:(.text.MPI_AI_DisableReSmp+0x2b0):对‘HI_UPVQE_Destroy’未定义的引用 mpi_ai.c:(.text.MPI_AI_DisableReSmp+0x2e8):对‘HI_UPVQE_Create’未定义的引用 HIlib/libmpi.a(mpi_ai.o):在函数‘HI_MPI_AI_DisableChn’中: mpi_ai.c:(.text.HI_MPI_AI_DisableChn+0x128):对‘HI_UPVQE_Destroy’未定义的引用 HIlib/libmpi.a(mpi_ai.o):在函数‘HI_MPI_AI_SetVqeAttr’中: mpi_ai.c:(.text.HI_MPI_AI_SetVqeAttr+0x388):对‘HI_UPVQE_Destroy’未定义的引用 mpi_ai.c:(.text.HI_MPI_AI_SetVqeAttr+0x464):对‘HI_UPVQE_Create’未定义的引用 HIlib/libmpi.a(mpi_ai.o):在函数‘HI_MPI_AI_GetVqeAttr’中: mpi_ai.c:(.text.HI_MPI_AI_GetVqeAttr+0x98):对‘HI_UPVQE_GetConfig’未定义的引用 HIlib/libmpi.a(mpi_ai.o):在函数‘HI_MPI_AI_EnableVqe’中: mpi_ai.c:(.text.HI_MPI_AI_EnableVqe+0x19c):对‘HI_UPVQE_Destroy’未定义的引用 mpi_ai.c:(.text.HI_MPI_AI_EnableVqe+0x1b0):对‘HI_UPVQE_Create’未定义的引用 HIlib/libmpi.a(mpi_ai.o):在函数‘HI_MPI_AI_DisableVqe’中: mpi_ai.c:(.text.HI_MPI_AI_DisableVqe+0xf8):对‘HI_UPVQE_Destroy’未定义的引用 mpi_ai.c:(.text.HI_MPI_AI_DisableVqe+0x10c):对‘HI_UPVQE_Create’未定义的引用 HIlib/libmpi.a(mpi_ai.o):在函数‘HI_MPI_AI_GetFrame’中: mpi_ai.c:(.text.HI_MPI_AI_GetFrame+0x250):对‘HI_UPVQE_GetConfig’未定义的引用 mpi_ai.c:(.text.HI_MPI_AI_GetFrame+0x2fc):对‘HI_UPVQE_WriteFrame’未定义的引用 mpi_ai.c:(.text.HI_MPI_AI_GetFrame+0x34c):对‘HI_UPVQE_ReadF
<think>嗯,用户遇到了编译错误,具体是HI_UPVQE系列函数的未定义引用问题。首先,我需要确认这些函数属于哪个库。通常,像HI_开头的函数可能是海思(Hisilicon)芯片的SDK中的一部分。用户提到了mpi_aenc.c和mpi_ai.c,这说明问题出现在音频编码和音频输入模块中。
接下来,我需要检查编译时的链接步骤是否正确。用户可能没有正确链接到包含这些函数的库文件,比如libupvqe.a或libupvqe.so。此外,头文件是否包含正确也很重要,确保在代码中有#include "hi_upvqe.h"之类的语句。
然后,考虑SDK版本是否匹配。如果用户升级了SDK或者更换了版本,某些函数可能有变动或被移除,导致链接错误。需要核对文档,确认这些函数是否存在以及是否需要特定的宏定义,比如HI_UPVQE_SUPPORT。
另外,编译顺序和依赖关系也可能影响链接结果。确保库文件的路径在-L参数中正确指定,并且库的顺序符合依赖关系,被依赖的库应该放在后面。
最后,如果确认库和头文件都正确,但问题依旧,可能需要联系原厂技术支持,确认是否存在已知问题或需要特定的补丁。</think>### 解决方案:未定义引用HI_UPVQE系列函数的排查步骤
#### 1. 确认库文件链接
HI_UPVQE系列函数属于海思平台音频前处理模块(UPVQE),需确保编译时正确链接`libupvqe.a`或`libupvqe.so`库文件:
```makefile
# 示例Makefile关键配置
LDFLAGS += -L/path/to/hi_sdk/lib -lupvqe -lmpi -lhdmi -lvoice_engine
```
若路径未指定或库文件缺失,会导致`undefined reference`错误[^1]。
#### 2. 验证头文件包含
检查源码是否包含UPVQE模块的头文件声明:
```c
#include "hi_upvqe.h" // 核心API声明
#include "hi_upvqe_comm.h" // 数据结构定义
```
若头文件路径未加入编译参数,需添加:
```makefile
CFLAGS += -I/path/to/hi_sdk/include/upvqe
```
#### 3. 检查SDK版本兼容性
通过`hi_upvqe_version.h`确认SDK版本与编译环境匹配:
```c
HI_VOID HI_UPVQE_GetVersion(HI_UPVQE_VERSION_S *pstVersion);
```
若函数原型或功能有变更,需同步更新调用代码。
#### 4. 排查宏定义依赖
部分UPVQE功能需通过编译宏开启:
```makefile
CFLAGS += -DHI_UPVQE_SUPPORT -DHI_AENC_ADVANCE_FUNC
```
未定义相关宏会导致函数声明被预处理器过滤。
#### 5. 验证符号表一致性
使用`nm`命令检查库文件是否包含目标符号:
```bash
nm -D libupvqe.so | grep HI_UPVQE_GetConfig
```
若无输出,说明库文件未包含对应实现,需更新SDK或检查编译配置。
#### 6. 交叉编译工具链验证
确认使用的工具链(如arm-himix200-linux)与SDK构建环境一致:
```bash
readelf -h libupvqe.so | grep Machine # 检查ELF文件架构
```
device/hisilicon/bigfish/hippo/vendor/extlibs/sensor/multichip/sc7660tr.c:21: error: undefined reference to '__android_log_vprint'
这个错误是因为在该文件中使用了 Android 系统的日志函数,但编译器找不到该函数的实现。通常情况下,需要在编译时链接 Android 系统的日志库 liblog.so 才能解决这个问题。
你可以检查以下问题:
1. 确认是否已经包含了 Android 系统日志库的头文件 android/log.h。
2. 确认是否已经链接了 Android 系统日志库 liblog.so。可以在 Android.mk 中添加 LOCAL_LDLIBS += -llog 来链接该库。
3. 如果还是无法解决问题,可以尝试在编译命令中手动链接该库,例如:gcc -o myapp myapp.c -llog。
希望这些信息能帮到你。
阅读全文
相关推荐















