链接出现问题

Viewed 66

问题描述


/home/wahuhu/k230_sdk/toolchain/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/../lib/gcc/riscv64-unknown-linux-musl/12.0.1/../../../../riscv64-unknown-linux-musl/bin/ld: warning: _camera.elf has a LOAD segment with RWX permissions
/home/wahuhu/k230_sdk/src/common/cdk/user/mapi/mediaclient/lib/libmapi.a(mapi_venc.o): in function venc_internuclear_fifo_create': mapi_venc.c:(.text+0x16): relocation truncated to fit: R_RISCV_HI20 against FUNCTION.15'
/home/wahuhu/k230_sdk/src/common/cdk/user/mapi/mediaclient/lib/libmapi.a(read_venc_data.o): in function little_sys_mmap': read_venc_data.c:(.text+0x3a): relocation truncated to fit: R_RISCV_HI20 against mmap_fd_tmp.1'
/home/wahuhu/k230_sdk/src/common/cdk/user/mapi/mediaclient/lib/libmapi.a(mapi_ai_client.o): in function _ai_aec_init_datafifo': mapi_ai_client.c:(.text+0x40): relocation truncated to fit: R_RISCV_HI20 against FUNCTION.19'
/home/wahuhu/k230_sdk/src/common/cdk/user/mapi/mediaclient/lib/libmapi.a(mapi_aenc_client.o): in function _reset_aenc_ctl': mapi_aenc_client.c:(.text+0x24): relocation truncated to fit: R_RISCV_HI20 against FUNCTION.20'
collect2: error: ld returned 1 exit status
make: *** [Makefile:45: build] Error 1

复现步骤


我的makefile:SHELL:=bash#
BASE_CONTENT:=/home/wahuhu/k230_sdk#
CODE_CONTENT:=/home/wahuhu/k230_sdk/code/big/car_detect#
OUTPUT_NAME:=_camera#
EXTRA_STORAGE:=-lrtthread -lstdc++ -lrvv -lNncase.Runtime.Native -lnncase.rt_modules.k230 -lfunctional_k230 -lsys -lvicap -lvb -lcam_device -lcam_engine -lhal -loslayer -lebase -lfpga -lisp_drv -lbinder -lauto_ctrol -lcommon -lcam_caldb -lisi -l3a -lai -lmapi -lmp4 -ldatafifo -lbuffer_management -lcameric_drv -lvideo_in -lvirtual_hal -lstart_engine -lcmd_buffer -lswitch -lcameric_reg_drv -lt_database_c -lt_mxml_c -lt_json_c -lt_common_c -lvo -lconnector -lsensor -latomic -ldma -lvenc -lipcmsg#
EXTRA_STORAGE_CONTENT:= -L/home/wahuhu/k230_sdk/src/big/mpp/userapps/lib
-L/home/wahuhu/k230_sdk/src/big/nncase/riscv64/rvvlib/
-L/home/wahuhu/k230_sdk/src/big/nncase/riscv64/nncase/lib/
-L/home/wahuhu/k230_sdk/src/common/cdk/user/component/ipcmsg/slave/lib
-L/home/wahuhu/k230_sdk/src/big/mpp/middleware/src/mp4_format/src
-L/home/wahuhu/k230_sdk/src/common/cdk/user/mapi/mediaclient/lib
-L/home/wahuhu/k230_sdk/src/common/cdk/user/middleware/mp4_format/lib
-L/home/wahuhu/k230_sdk/src/common/cdk/user/component/datafifo/host/lib
-L/home/wahuhu/k230_sdk/src/big/mpp/userapps/lib
#-L/home/wahuhu/k230_sdk/src/big/mpp/kernel/lib
-L/home/wahuhu/k230_sdk/src/big/mpp/userapps/lib#
EXTRA_INCLUDE:= #
EXTRA_INCLUDE_CONTENT:= -I/home/wahuhu/k230_sdk/src/big/nncase/riscv64
-I/home/wahuhu/k230_sdk/src/big/nncase/riscv64/nncase/include
-I/home/wahuhu/k230_sdk/src/big/nncase/riscv64/nncase/include/nncase/runtime
-I/home/wahuhu/k230_sdk/src/big/nncase/riscv64/rvvlib/include
-I/home/wahuhu/k230_sdk/src/big/mpp/userapps/api
-I/home/wahuhu/k230_sdk/src/big/mpp/include
-I/home/wahuhu/k230_sdk/src/big/mpp/include/comm
-I/home/wahuhu/k230_sdk/src/big/mpp/userapps/sample/sample_vo
-I/home/wahuhu/k230_sdk/src/common/cdk/user/component/ipcmsg/include
-I/home/wahuhu/k230_sdk/src/big/mpp/middleware/src/mp4_format/include
-I/home/wahuhu/k230_sdk/src/common/cdk/user/mapi/include/api
-I/home/wahuhu/k230_sdk/src/common/cdk/user/mapi/include
-I/home/wahuhu/k230_sdk/src/common/cdk/user/mapi/include/comm
-I/home/wahuhu/k230_sdk/src/common/cdk/user/middleware/mp4_format/include#
#以下不建议变动
GCC:=$(BASE_CONTENT)/toolchain/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/riscv64-unknown-linux-musl-gcc
LINK_SCRIPT:=$(BASE_CONTENT)/src/big/mpp/userapps/sample/linker_scripts/riscv64/link.lds
LIB:=-lrtthread
LIB_CONTENT:=-L$(BASE_CONTENT)/src/big/rt-smart/userapps/sdk/rt-thread/lib/risc-v/rv64 -L$(BASE_CONTENT)/k230_sdk/src/big/rt-smart/userapps/sdk/lib/risc-v/rv64
FILE:=$(shell ls)
TARGET_FILE:=$(filter %.c %.cpp,$(FILE))
LINK_NAME:=$(patsubst %.cpp,%.o,$(TARGET_FILE))#
#warning: hello.elf has a LOAD segment with RWX permissions :mean 这个警告是因为链接脚本中「数据段 / 代码段的内存权限被设为 RWX(可读可写可执行)」

build :
@echo $(TARGET_FILE)
@for i in $(TARGET_FILE); do
obj=$${i%.cpp}.o;
$(GCC) $(EXTRA_INCLUDE_CONTENT) -o $$obj -c -mcmodel=medany -fPIE -march=rv64imafdcv -mabi=lp64d $$i;
echo "link name :$$obj";
done
@$(GCC) -o $(OUTPUT_NAME).elf -pie -Wl,--relax -mcmodel=medany -march=rv64imafdcv -mabi=lp64d -T $(LINK_SCRIPT) $(LIB_CONTENT) -Wl,--whole-archive $(LIB) -Wl,--no-whole-archive -n --static $(LINK_NAME) $(EXTRA_STORAGE_CONTENT) -Wl,--start-group $(EXTRA_STORAGE) -Wl,--end-group

硬件板卡


k230_canmv_v3

软件版本


双系统·

1 Answers

你好,请使用纯Linux或者纯RTOS SDK.

为什么双系统不行?

我这个项目目前必须使用双系统,目前是一个ipcmsg,一个vicap图像bind到hdmi,一个mp4编解码,为了简化开发都写到一块了,如果不能写入一个文件可以通过共享内存的方式吗?

如果可以实现的话,有没有就是直接共用vicap程序的内存的方法?(内存紧张)