文件名或扩展名太长问题

文件名或扩展名太长问题

问题描述:
问题原因:
在编译时,需要链接的 .o 文件过多,IDE 中编译信息每行输出量有限,一行无法显示所有 .o 文件,因此会报“文件名或扩展名太长”的错误。

解决办法:
通过修改 Makefile 将链接的文件拆分成多次链接。
可以通过
$(info "0000000000000") //$(info "打印信息")
在 makefile 中添加打印信息
#********************************************************************************************************* # 文 件 名: libmyapp.mk # # 创 建 人: RealEvo-IDE # # 文件创建日期: 2021 年 05 月 14 日 # # 描 述: 本文件由 RealEvo-IDE 生成,用于配置 Makefile 功能,请勿手动修改 #********************************************************************************************************* #********************************************************************************************************* # Clear setting #********************************************************************************************************* include $(CLEAR_VARS_MK) #********************************************************************************************************* # Target #********************************************************************************************************* LOCAL_TARGET_NAME := myapp.so #********************************************************************************************************* # Source list #********************************************************************************************************* MYAPP_PART1_SRCS := \ src/a.c MYAPP_PART2_SRCS := \ src/b.c MYAPP_PART3_SRCS := \ src/c.c MYAPP_PART4_SRCS := \ src/d.c MYAPP_PART5_SRCS := \ src/e.c \ src/f.c LOCAL_SRCS := \ #将源文件拆分成多份,便于最后分批链接 $(MYAPP_PART1_SRCS) \ $(MYAPP_PART2_SRCS) \ $(MYAPP_PART3_SRCS) \ $(MYAPP_PART4_SRCS) \ $(MYAPP_PART5_SRCS) #********************************************************************************************************* # Header file search path (eg. LOCAL_INC_PATH := -I"Your header files search path") #********************************************************************************************************* LOCAL_INC_PATH := #********************************************************************************************************* # Pre-defined macro (eg. -DYOUR_MARCO=1) #********************************************************************************************************* LOCAL_DSYMBOL := #********************************************************************************************************* # Compiler flags #********************************************************************************************************* LOCAL_CFLAGS := LOCAL_CXXFLAGS := #********************************************************************************************************* # Depend library (eg. LOCAL_DEPEND_LIB := -la LOCAL_DEPEND_LIB_PATH := -L"Your library search path") #********************************************************************************************************* LOCAL_DEPEND_LIB := LOCAL_DEPEND_LIB_PATH := #********************************************************************************************************* # C++ config #********************************************************************************************************* LOCAL_USE_CXX := no LOCAL_USE_CXX_EXCEPT := no #********************************************************************************************************* # Code coverage config #********************************************************************************************************* LOCAL_USE_GCOV := no #********************************************************************************************************* # OpenMP config #********************************************************************************************************* LOCAL_USE_OMP := no #********************************************************************************************************* # User link command #********************************************************************************************************* LOCAL_PRE_LINK_CMD := LOCAL_POST_LINK_CMD := LOCAL_PRE_STRIP_CMD := LOCAL_POST_STRIP_CMD := include $(APPLICATION_MK) ##以下部分需要根据实际情况修改(app, .a, .so 修改方式略有不同,以下是app类型) #********************************************************************************************************* # Objects #********************************************************************************************************* MYAPP_PART1_OBJS := $(addprefix $(OBJPATH)/$(LOCAL_TARGET_NAME)/, $(addsuffix .o, $(basename $(MYAPP_PART1_SRCS)))) MYAPP_PART2_OBJS := $(addprefix $(OBJPATH)/$(LOCAL_TARGET_NAME)/, $(addsuffix .o, $(basename $(MYAPP_PART2_SRCS)))) MYAPP_PART3_OBJS := $(addprefix $(OBJPATH)/$(LOCAL_TARGET_NAME)/, $(addsuffix .o, $(basename $(MYAPP_PART3_SRCS)))) MYAPP_PART4_OBJS := $(addprefix $(OBJPATH)/$(LOCAL_TARGET_NAME)/, $(addsuffix .o, $(basename $(MYAPP_PART4_SRCS)))) MYAPP_PART5_OBJS := $(addprefix $(OBJPATH)/$(LOCAL_TARGET_NAME)/, $(addsuffix .o, $(basename $(MYAPP_PART5_SRCS)))) $(target)_A := $(OUTPATH)/$(addsuffix .a, $(basename $(LOCAL_TARGET_NAME))) #********************************************************************************************************* # Override link command #********************************************************************************************************* $($(target)_EXE): $($(target)_OBJS) $($(target)_DEPEND_TARGET) $($(target)_A) @rm -f $@ $(__PRE_LINK_CMD) $(__LD) $(__CPUFLAGS) $(ARCH_PIC_LDFLAGS) $(addsuffix .a, $(basename $@ )) $(__LIBRARIES) -o $@ $(__POST_LINK_CMD) #********************************************************************************************************* # Override make archive object files 分批链接 #********************************************************************************************************* $($(target)_A): $($(target)_OBJS) @rm -f $@ $(__PRE_LINK_CMD) $(AR) $(TOOLCHAIN_AR_FLAGS) $@ $(MYAPP_PART1_OBJS) $(AR) $(TOOLCHAIN_AR_FLAGS) $@ $(MYAPP_PART2_OBJS) $(AR) $(TOOLCHAIN_AR_FLAGS) $@ $(MYAPP_PART3_OBJS) $(AR) $(TOOLCHAIN_AR_FLAGS) $@ $(MYAPP_PART4_OBJS) $(AR) $(TOOLCHAIN_AR_FLAGS) $@ $(MYAPP_PART5_OBJS) $(__POST_LINK_CMD) #********************************************************************************************************* # End #*********************************************************************************************************

    • Related Articles

    • 编译过程链接文件顺序修改

      Q:编译过程链接时的 .o文件顺序问题,这个在哪儿改,在 linux 是直接修改 makfile 解决的,SylixOS 在哪里修改? 需要手动修改顺序,首先的关闭ide自动扫描添加源文件功能 如图所示 然后再 工程名.mk 文件里面修改源文件顺序 该方法的弊端,就是后续 需要新增或者删除源文件,需要手动改 xxx.mk 文件。 Do not scan source files 这个地方记得不要打开,否则每次编译 IDE 都会重新扫描排序 相关文章:文件名或扩展名太长问题 ...
    • 如何解决 IDE 链接文件过多时的栈溢出错误

      问:IDE 链接文件过多时的栈溢出错误。 我们在移植时一个大型工程时,IDE可能在最后链接时报了栈溢出的错误,绝大部分情况下原因为需要链接的文件过多,导致最后一条链接命令太长,超过工具限制的 16K 字节。 一般的解决方案为:缩小路径长度,或者将一部分文件打包为一个动态库,最后一起链接,以减少链接命令的长度。但这些方案对于一个标准的工程来说,不太合理。 解决方法: ...