应用程序添加了共享内存头文件,编译时编译通过,链接失败

Viewed 26

一、描述你遇到的问题

应用程序添加了共享内存头文件,编译时编译通过,链接失败

二、你具体做的所有步骤结果截图

代码中头文件
#include "sle_common.h"
#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <stddef.h>
#include <pthread.h>

#include <fcntl.h>
#include <sys/stat.h>
#include <semaphore.h>
#include <sys/wait.h>
#include "errcode.h"
#include <errno.h>

#include <sys/ipc.h>
#include <sys/mman.h>
#include <sys/shm.h>

编译日志:
[ 96%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/host/hmac/hmac_sample_daq_phy.c.obj
[ 96%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/host/mac/mac_device.c.obj
[ 96%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/host/mac/mac_frame.c.obj
[ 97%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/host/mac/mac_ie.c.obj
[ 97%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/host/mac/mac_regdomain.c.obj
[ 97%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/host/mac/mac_resource.c.obj
[ 97%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/host/mac/mac_user.c.obj
[ 97%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/host/mac/mac_vap.c.obj
[ 97%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/host/oal/liteOS/oal_main.c.obj
[ 97%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/host/wal/release/liteOS/wal_event_msg.c.obj
[ 97%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/host/wal/release/liteOS/wal_event.c.obj
[ 98%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_aggr.c.obj
[ 98%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_gla.c.obj
[ 98%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_autorate.c.obj
[ 98%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_dbac_hmac.c.obj
[ 98%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_intf_det.c.obj
[ 98%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_intrf_mode.c.obj
[ 98%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_main.c.obj
[ 98%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_probe_common.c.obj
[100%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_rts.c.obj
[100%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_schedule.c.obj
[100%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_tpc.c.obj
[100%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_temp_protect_basic.c.obj
[100%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_traffic_ctl.c.obj
[100%] Building C object protocol/wifi/CMakeFiles/wifi_driver_hmac.dir/source/alg/iot_alg/host/alg_tx_tb_hmac.c.obj
[100%] Linking C static library ../../../../../../interim_binary/ws63/libs/wifi/ws63-liteos-app/libwifi_driver_hmac.a
[100%] Built target wifi_driver_hmac
Scanning dependencies of target ws63-liteos-app
[100%] Building C object CMakeFiles/ws63-liteos-app.dir/temp/null_.c.obj
[100%] Linking C executable ws63-liteos-app.elf
Generating /data/nearlink/near_link_sdk/device/soc/hisilicon/ws63v100/sdkv100/drivers/boards/ws63/evb/linker/ws63_liteos_app_linker/linker.prelds -> /data/nearlink/near_link_sdk/device/soc/hisilicon/ws63v100/sdkv100/output/ws63/acore/ws63-liteos-app/linker.lds
Memory region Used Size Region Size %age Used
ROM: 0 GB 268 KB 0.00%
ITCM: 12896 B 16 KB 78.71%
DTCM: 29100 B 32 KB 88.81%
SRAM: 341248 B 548608 B 62.20%
PRESERVE_SHARE_MEM: 252 B 256 B 98.44%
PROGRAM_STARTUP: 480 B 1 KB 46.88%
PROGRAM: 1334248 B 2095360 B 63.68%
/data/nearlink/near_link_sdk/device/soc/hisilicon/ws63v100/sdkv100/tools/bin/compiler/riscv/cc_riscv32_musl_b090/cc_riscv32_musl_fp/bin/../lib/gcc/riscv32-linux-musl/7.3.0/../../../../riscv32-linux-musl/bin/ld: ../../../../interim_binary/ws63/libs/ohos/ws63-liteos-app/libsle_hybrid_n_mode.a(libsle_hybrid_n_mode.sle_common.o): in function init_shmmetux': sle_common.c:(.text.init_shmmetux+0x1e): undefined reference to shmget'
/data/nearlink/near_link_sdk/device/soc/hisilicon/ws63v100/sdkv100/tools/bin/compiler/riscv/cc_riscv32_musl_b090/cc_riscv32_musl_fp/bin/../lib/gcc/riscv32-linux-musl/7.3.0/../../../../riscv32-linux-musl/bin/ld: sle_common.c:(.text.init_shmmetux+0x4e): undefined reference to shmat' /data/nearlink/near_link_sdk/device/soc/hisilicon/ws63v100/sdkv100/tools/bin/compiler/riscv/cc_riscv32_musl_b090/cc_riscv32_musl_fp/bin/../lib/gcc/riscv32-linux-musl/7.3.0/../../../../riscv32-linux-musl/bin/ld: sle_common.c:(.text.init_shmmetux+0x80): undefined reference to shmdt'
/data/nearlink/near_link_sdk/device/soc/hisilicon/ws63v100/sdkv100/tools/bin/compiler/riscv/cc_riscv32_musl_b090/cc_riscv32_musl_fp/bin/../lib/gcc/riscv32-linux-musl/7.3.0/../../../../riscv32-linux-musl/bin/ld: sle_common.c:(.text.init_shmmetux+0x8e): undefined reference to shmctl' /data/nearlink/near_link_sdk/device/soc/hisilicon/ws63v100/sdkv100/tools/bin/compiler/riscv/cc_riscv32_musl_b090/cc_riscv32_musl_fp/bin/../lib/gcc/riscv32-linux-musl/7.3.0/../../../../riscv32-linux-musl/bin/ld: sle_common.c:(.text.init_shmmetux+0x9a): undefined reference to shmdt'
/data/nearlink/near_link_sdk/device/soc/hisilicon/ws63v100/sdkv100/tools/bin/compiler/riscv/cc_riscv32_musl_b090/cc_riscv32_musl_fp/bin/../lib/gcc/riscv32-linux-musl/7.3.0/../../../../riscv32-linux-musl/bin/ld: sle_common.c:(.text.init_shmmetux+0xd2): undefined reference to setenv' /data/nearlink/near_link_sdk/device/soc/hisilicon/ws63v100/sdkv100/tools/bin/compiler/riscv/cc_riscv32_musl_b090/cc_riscv32_musl_fp/bin/../lib/gcc/riscv32-linux-musl/7.3.0/../../../../riscv32-linux-musl/bin/ld: ../../../../interim_binary/ws63/libs/ohos/ws63-liteos-app/libsle_hybrid_n_mode.a(libsle_hybrid_n_mode.sle_common.o): in function .L51':
sle_common.c:(.text.uapi_uart_write_by_sem+0x6a): undefined reference to shmat' /data/nearlink/near_link_sdk/device/soc/hisilicon/ws63v100/sdkv100/tools/bin/compiler/riscv/cc_riscv32_musl_b090/cc_riscv32_musl_fp/bin/../lib/gcc/riscv32-linux-musl/7.3.0/../../../../riscv32-linux-musl/bin/ld: ../../../../interim_binary/ws63/libs/ohos/ws63-liteos-app/libsle_hybrid_n_mode.a(libsle_hybrid_n_mode.sle_common.o): in function .L56':
sle_common.c:(.text.uapi_uart_write_by_sem+0x112): undefined reference to shmdt' /data/nearlink/near_link_sdk/device/soc/hisilicon/ws63v100/sdkv100/tools/bin/compiler/riscv/cc_riscv32_musl_b090/cc_riscv32_musl_fp/bin/../lib/gcc/riscv32-linux-musl/7.3.0/../../../../riscv32-linux-musl/bin/ld: sle_common.c:(.text.uapi_uart_write_by_sem+0x130): undefined reference to shmctl'
collect2: 错误: ld 返回 1
make[2]: *** [CMakeFiles/ws63-liteos-app.dir/build.make:259:ws63-liteos-app.elf] 错误 1
make[1]: *** [CMakeFiles/Makefile2:7974:CMakeFiles/ws63-liteos-app.dir/all] 错误 2
make: *** [Makefile:84:all] 错误 2
######### Build target:ws63_liteos_app failed
root@lzdz:/data/nearlink/near_link_sdk/device/soc/hisilicon/ws63v100/sdkv100#

三、当前开发板状态全景照片

请插入图片

四、开发板串口所有日志

请在此处粘贴串口日志

1 Answers

从你提供的编译日志来看,链接阶段出现了多个“undefined reference”错误,这些错误通常是由于缺少必要的库文件或链接库的顺序不正确导致的。具体来说,错误信息中提到了以下几个未定义的引用:

  • shmget
  • shmat
  • shmdt
  • shmctl
  • setenv

这些函数是与共享内存操作相关的系统调用,通常定义在 libc 库中。以下是一些可能的原因和解决方案:

1. 缺少链接库

你可能没有正确链接 libc 库,或者链接库的顺序不正确。确保在链接阶段正确链接了 libc 库。

解决方案:

在 CMakeLists.txt 文件中,确保你链接了 libc 库。你可以通过以下方式添加:

target_link_libraries(ws63-liteos-app c)

2. 链接库顺序不正确

链接库的顺序也可能导致问题。确保在链接时,libc 库放在其他库的后面。

解决方案:

在 CMakeLists.txt 文件中,确保 libc 库在最后链接:

target_link_libraries(ws63-liteos-app other_libraries c)

3. 编译器或工具链问题

如果你使用的是交叉编译工具链,确保工具链的 libc 库是完整的,并且路径正确。

解决方案:

检查你的工具链配置,确保 libc 库的路径正确,并且库文件存在。

4. 系统库版本不匹配

如果你在不同的系统或环境中编译,可能会导致系统库版本不匹配。

解决方案:

确保编译环境和目标环境的系统库版本一致。

5. 未定义的函数

某些函数可能在你的目标平台上不可用。例如,setenv 函数在某些嵌入式平台上可能不可用。

解决方案:

检查你的目标平台是否支持这些函数。如果不支持,可能需要使用替代方案或自己实现这些函数。

6. 编译选项问题

某些编译选项可能会影响链接阶段的行为。例如,-nostdlib 选项会阻止链接标准库。

解决方案:

检查你的编译选项,确保没有使用 -nostdlib 或其他可能影响链接的选项。

7. 头文件路径问题

虽然编译通过,但头文件路径可能不正确,导致链接时找不到相应的实现。

解决方案:

确保头文件路径正确,并且所有必要的头文件都已包含。

总结

根据错误信息,最可能的原因是缺少 libc 库或链接库顺序不正确。建议你首先检查 CMakeLists.txt 文件,确保正确链接了 libc 库,并且链接顺序正确。如果问题仍然存在,可以进一步检查工具链配置和编译选项。


这种问题一般问deepseek都能解决