问题1:


/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: cannot find -lwiringpi: No such file or directory
找不到-lwiringpi库路径,其实在3rd/usr/lib/aarch64-linux-gnu下没有libwiringPi.so.2                                                                                                                                                                 libwiringPi.so.2.50的文件

解决方法:

安装 ARM64 版本的 deb 包
如果你有 ARM64 设备,可以直接在设备上运行:sudo apt update
sudo apt install wiringpi
然后将 /usr/lib/aarch64-linux-gnu/libwiringPi.so.* 复制到宿主机的交叉编译路径中(如 ./3rd/usr/lib/aarch64-linux-gnu/)。

问题二:

/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: cannot open output file obj/garbage: No such file or directory

一个错误:`cannot open output file obj/garbage: No such file or directory`。这意味着在链接时,无法创建输出文件`obj/garbage`。可能的原因是目录`obj`不存在,或者权限问题。查看Makefile,我注意到在链接目标之前,有一个命令尝试创建目录,但可能存在一些问题。

  1. 修正了OBJ变量的定义,使用正确的patsubst模式:$(patsubst src/%.c,obj/%.o,$(SRC))

  2. 删除了无效的目录创建命令$(shell mkdir -p $(dir &(OBJ)))(因为存在语法错误且不需要)

  3. 在模式规则obj/%.o中,将$(dir &(OBJ))修正为$(dir $@),确保创建当前目标文件的目录

  4. 在链接规则$(TARGET)中,添加了目录创建命令@mkdir -p $(dir $(TARGET)),确保输出目录存在

  5. 链接命令中移除了$(CFLAGS),因为链接阶段不需要头文件路径

问题3:

huang@huang-Ubuntu:~/smart_brush_can$ make compile
aarch64-linux-gnu-gcc -o obj/smartRubishCan.o -c src/smartRubishCan.c -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu     # 类似gcc -o garbage garbage.c -I./inc  指令
aarch64-linux-gnu-gcc -o obj/socket.o -c src/socket.c -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu     # 类似gcc -o garbage garbage.c -I./inc  指令
aarch64-linux-gnu-gcc -o obj/uartTool.o -c src/uartTool.c -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu     # 类似gcc -o garbage garbage.c -I./inc  指令
aarch64-linux-gnu-gcc -o obj/p_smartTrashCan.o -c src/p_smartTrashCan.c -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu     # 类似gcc -o garbage garbage.c -I./inc  指令
aarch64-linux-gnu-gcc -o obj/garbage.o -c src/garbage.c -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu     # 类似gcc -o garbage garbage.c -I./inc  指令
aarch64-linux-gnu-gcc -o obj/garbage obj/smartRubishCan.o obj/socket.o obj/uartTool.o obj/p_smartTrashCan.o obj/garbage.o -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu  -L./3rd/usr/local/lib -L./3rd/lib/aarch64-linux-gnu -L./3rd/usr/lib/aarch64-linux-gnu -L./3rd/usr/lib/python3.10 -lwiringPi -lpython3.10 -pthread -lcrypt    # 链命令
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: warning: libexpat.so.1, needed by ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: warning: libz.so.1, needed by ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ExpatVersion'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetEndElementHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ParserCreate_MM'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetEncoding'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `inflateEnd'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetBase'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetParamEntityParsing'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetNamespaceDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `deflate'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `deflateInit_'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetErrorCode'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetUserData'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ExternalEntityParserCreate'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `inflateCopy@ZLIB_1.2.0'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetCurrentColumnNumber'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `inflateInit2_'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetStartDoctypeDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetStartCdataSectionHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `inflate'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetDefaultHandlerExpand'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetExternalEntityRefHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetXmlDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `crc32'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetInputContext'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetStartNamespaceDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `deflateEnd'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetEndDoctypeDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `zlibVersion'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_FreeContentModel'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_UseForeignDTD'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetDefaultHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ParseBuffer'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetSpecifiedAttributeCount'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetNotStandaloneHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `inflateSetDictionary'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ExpatVersionInfo'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetCurrentLineNumber'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetEndCdataSectionHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetCommentHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetSkippedEntityHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetProcessingInstructionHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetBase'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetElementDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ErrorString'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetEndNamespaceDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetNotationDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetReturnNSTriplet'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetEntityDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `deflateCopy'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_ParserFree'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `deflateInit2_'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetElementHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetUnknownEncodingHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_StopParser'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetFeatureList'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetAttlistDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetStartElementHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_Parse'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetBuffer'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `deflateSetDictionary'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_GetCurrentByteIndex'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `adler32'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetCharacterDataHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetUnparsedEntityDeclHandler'
/usr/lib/gcc-cross/aarch64-linux-gnu/11/../../../../aarch64-linux-gnu/bin/ld: ./3rd/usr/lib/aarch64-linux-gnu/libpython3.10.so: undefined reference to `XML_SetHashSalt'
collect2: error: ld returned 1 exit status
make: *** [Makefile:41: obj/garbage] Error 1
huang@huang-Ubuntu:~/smart_brush_can$

主要问题是缺少两个重要的库:libexpat.so.1 和 libz.so.1。这些库是 Python 运行时所依赖的。

解决方法:

在 LIBS 变量中添加缺失的库:

LIBS := -lwiringPi -lpython3.10 -lexpat -lz -pthread -lcrypt -ldl -lutil -lm

最终解决好啦


huang@huang-Ubuntu:~/smart_brush_can$ make compile
aarch64-linux-gnu-gcc -o obj/garbage obj/smartRubishCan.o obj/socket.o obj/uartTool.o obj/p_smartTrashCan.o obj/garbage.o -I./inc -I./3rd/usr/local/include -I./3rd/usr/include -I./3rd/usr/include/python3.10 -I./3rd/usr/include/aarch64-linux-gnu/python3.10 -I./3rd/usr/include/aarch64-linux-gnu  -L./3rd/usr/local/lib -L./3rd/lib/aarch64-linux-gnu -L./3rd/usr/lib/aarch64-linux-gnu -L./3rd/usr/lib/python3.10 -lwiringPi -lpython3.10 -pthread -lcrypt -lexpat -lz -lm -ldl -lutil    # 链命令
huang@huang-Ubuntu:~/smart_brush_can$ ^C
huang@huang-Ubuntu:~/smart_brush_can$ ls -la obj/garbage
-rwxrwxr-x 1 huang huang 25112 Aug 22 09:03 obj/garbage
huang@huang-Ubuntu:~/smart_brush_can$ file obj/garbage
obj/garbage: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=d6f9ab643d3320ef46676e0c6a698cfcdfb9bc2f, for GNU/Linux 3.7.0, not stripped
huang@huang-Ubuntu:~/smart_brush_can$

makefile

# 定义交叉编译工具
CC := aarch64-linux-gnu-gcc
# 存放所有的.c文件,shell函数查找所有当前目录及其子目录的.c文件
SRC := $(shell find src -name "*.c")
# 头文件
INC := ./inc \./3rd/usr/local/include \./3rd/usr/include \./3rd/usr/include/python3.10 \./3rd/usr/include/aarch64-linux-gnu/python3.10 \./3rd/usr/include/aarch64-linux-gnu# 所有.c文件生成.o在obj文件夹
OBJ := $(patsubst src/%.c,obj/%.o,$(SRC))# 创建目标,存在obj/garbage
TARGET := obj/garbage# 存放-I的所有头文件,foreach函数就是将INC的变量前面加上-I
CFLAGS := $(foreach item,$(INC),-I$(item)) LIB_PATH := ./3rd/usr/local/lib \./3rd/lib/aarch64-linux-gnu \./3rd/usr/lib/aarch64-linux-gnu \./3rd/usr/lib/python3.10# 指定库文件路径,foreach函数就是将LIB_PATH的变量前面加上-L
LDFLAGS := $(foreach item,$(LIB_PATH),-L$(item))# 链接库
LIBS := -lwiringPi -lpython3.10 -pthread -lcrypt -lexpat -lz -lm -ldl -lutil# 每个.c对应一个.o文件,通配符%
obj/%.o: src/%.c@mkdir -p $(dir $@)    # 创建obj文件夹$(CC) -o $@ -c $< $(CFLAGS)    # 类似gcc -o garbage garbage.c -I./inc  指令# 将.o文件连接输出obj/garbage
$(TARGET): $(OBJ)@mkdir -p $(dir $(TARGET))$(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) $(LIBS)    # 链命令# 编译指令
compile: $(TARGET)# 调试指令
debug:@echo "CC: $(CC)"@echo "SRC: $(SRC)"@echo "OBJ: $(OBJ)"@echo "TARGET: $(TARGET)"@echo "CFLAGS: $(CFLAGS)"@echo "LDFLAGS: $(LDFLAGS)"@echo "First object rule example:"@echo "  obj/$(firstword $(notdir $(OBJ))): src/$(firstword $(notdir $(SRC)))"# 清除指令
clean:rm -rf $(TARGET) obj# 伪目标
.PHONY: debug compile clean

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96954.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96954.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96954.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ExcelUtils实现 设置内容 插入行 复制行列格式

ExcelUtils实现&#xff1a;1.实现输入 例如 2 A 的excel格式&#xff0c;自动填充对应excel单元格&#xff1b;2.实现复制并新增下一行&#xff1b;3.实现控制复制上一行相同列的格式&#xff1b;4.实现控制复制同一行上一列的格式&#xff1b;/*** 在指定行下方插入新行并复…

SQLBot 智能问数、数据洞察逻辑拆解

* 基于 SQLBot v1.0.2* 使用 AI Gateway 抓取模型调用记录SQLBot 通过融入 LLM 能力实现了非常优秀的问数体验&#xff0c;这里记录一下产品中如何引入 AI 能力&#xff0c;顺便探究一下调用大模型的数据安全的问题&#xff08;是否会向模型提供真实数据&#xff09;。结论&…

实现统一门户登录跳转免登录

统一门户所有应用页面&#xff0c;点击跳转对应业务系统&#xff0c;实现业务系统免登录//获取所有业务系统项&#xff08;获取并存储到仓库) //用于页面展示 let appSubjectVoList ref<any>([]) appSubjectVoList.value userStore.getAppSubjectVoList || [] //登陆后…

卓伊凡的开源战略与PHP-SG16加密技术深度解析-sg加密技术详解-卓伊凡

卓伊凡的开源战略与PHP-SG16加密技术深度解析-sg加密技术详解-卓伊凡引言&#xff1a;在理想与现实间寻求平衡的开源之路近日&#xff0c;技术创业者卓伊凡先生宣布了一项重大决策&#xff1a;将于明日将其公司旗下的优雅草商城、项目管理系统等众多成熟商业产品正式开源。这一…

回溯 算法常见面试问题

1. 全排列(无重复元素) 核心思想:交换法避免额外空间 def permute(nums):def backtrack(first=0):if first == len(nums):res.append(nums.copy())returnfor i in range(first, len(nums)):nums[first], nums[i] = nums[i], nums[first]backtrack(first + 1)nums[first], …

营销专业人员核心能力构建与发展路径

CDA数据分析师证书含金量高&#xff0c;适应了未来数字化经济和AI发展趋势&#xff0c;难度不高&#xff0c;行业认可度高&#xff0c;对于找工作很有帮助。一、营销人员五维能力模型能力维度核心技能要素工具与方法论产出成果数据驱动决策指标监控、归因分析、效果优化Google …

Android系统学习2——Android.Utils.Log模块讨论

Android系统学习2——Android.Utils.Log模块讨论 ​ 打日志是一个很好的习惯&#xff0c;有的时候我们可以通过这里排查我们的程序的问题。在这里&#xff0c;我们可以从Android的日志机制入手讨论我们的Log模块。 android.util.Log 类的作用 Android 中最常用的日志工具是 and…

使用 YAML 文件,如何优雅地删除 k8s 资源?

在 Kubernetes 中&#xff0c;删除资源是日常运维中不可避免的操作。如果你习惯了使用 kubectl create 和 kubectl apply 来创建和更新资源&#xff0c;那么你可能也会想知道如何用同样基于文件的方式来删除它们。 虽然你总是可以用 kubectl delete deployment <name> 这…

如何将游戏和软件移动到另一个驱动器或外部磁盘中

您的C盘存储空间是否不足&#xff0c;或者您不小心在错误的驱动器中安装了游戏或应用程序。那么使用这个简单的技巧&#xff0c;您可以轻松的将游戏或应用程序移动到另一个分区或磁盘中。1、找到准备移动的软件&#xff0c;选择路径并复制&#xff1a;2、打开记事本&#xff0c…

赋能汽车电子智造:全星QMS打造品质检验、稽核与客诉管理闭环​——全星质量管理软件系统

全星QMS&#xff1a;驱动汽车电子质量卓越与商业成功的核心引擎 在智能汽车时代&#xff0c;汽车电子的质量已成为产品安全、性能与品牌信誉的核心。面对复杂的供应链、严苛的IATF 16949/ISO 26262标准及降本增效的压力&#xff0c;您的企业需要一位数字化战略伙伴。全星质量管…

【数据结构C语言】顺序表

1. 线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线…

AI 学习路径-记录分享

目录推荐学习资源延申阅读推荐学习资源 3Blue1Brown的个人空间-3Blue1Brown个人主页-哔哩哔哩视频 这个简短的课程有助于了解AI的本质&#xff0c;迈入学习AI的第一步。 欢迎加入 &#x1f917; AI Agents 课程 - Hugging Face Agents Course AI Agent&#xff0c;当前火爆…

Windows Server 2019 上安装 Ubuntu 20.04 的几种方式

docker desktop不支持Windows server 2019&#xff0c;所以Windows Server 2019 上安装 Ubuntu 20.04 变成一种可行的途径。记录一下其中可用的几种方式&#xff1a;&#x1f5c2; 常见安装方式对比方式原理难度适用场景优点缺点Hyper‑V 虚拟机&#xff08;推荐&#xff09;利…

当Trae遇上高德MCP:一次国庆武汉之旅的AI技术实践

当Trae遇上高德MCP&#xff1a;一次国庆武汉之旅的AI技术实践 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般绚烂的技术栈中&#xff0c;我是那个永不停歇的色彩收集者。 &#x1f98b; 每一个优化都是我培育的花朵&#xff0c;每一个特性都是我…

设计模式:抽象工厂模式

简介 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种封装一组具有共同主题或相关依赖关系的独立工厂的方式,而无需指定它们的具体类。核心思想是创建一系列相关或相互依赖的对象家族(产品族),可以将客户端与具体产品的创建过程解耦,使得客…

知行——同为科技24周年庆典

在宜人的金秋时节&#xff0c;北京同为科技有限公司于2025年8月23日&#xff0c;天津基地与江西同时隆重举办了以“知行”为主题的周年庆祝活动&#xff0c;回顾企业24年来的奋斗历程&#xff0c;凝聚“同为人”力量&#xff0c;展望更加光明的未来。当天&#xff0c;创始人周慧…

RK android14 定制ES8388音频编解码器双MIC双OUT(1)

文章目录 前言 一、适配内容概述 二、适配步骤 1. HAL层配置修改 1.1 添加声卡名称识别 (`audio_hw.c`) 1.2 注册声卡路由配置 (`config_list.h`) 1.3 定义路由配置表 (`es8388_config.h`) 2. 内核设备树修改 2.1 禁用默认声卡 2.2 配置ES8388声卡节点 2.3 配置I2C和Codec节点 …

Oracle跟踪及分析方法

1、SQL_TRACE 通过设置 SQL_TRACE 可以启用或禁用 SQL 跟踪工具&#xff0c;设置 SQL_TRACE 为 true 可以收集信息用于性能优化或问题诊断&#xff1b; 特别注意&#xff1a; 全局启用 SQL 跟踪可能会对性能产生严重影响。 可以使用 ALTER SESSION 跟踪特定会话。 Oracle 已…

第三阶段数据库-9:循环,编号,游标,分页

1_sql中的循环&#xff0c;编号&#xff08;1&#xff09;sql 中没有for循环&#xff0c;只有while循环&#xff0c;begin end 中间的就是while执行的语句&#xff0c;相当于{}declare i int; set i1; --begin end 中间的就是while执行的语句&#xff0c;相当于{} while(i<…

Redis高级篇:在Nginx、Redis、Tomcat(JVM)各环节添加缓存以实现多级缓存

摘要&#xff1a;多级缓存通过在 Nginx、Redis、Tomcat&#xff08;JVM&#xff09;各环节添加缓存&#xff0c;解决传统缓存中 Tomcat 瓶颈与 Redis 失效冲击数据库问题。利用 Caffeine 实现 JVM 缓存&#xff0c;OpenResty 结合 Lua 处理 Nginx 层逻辑&#xff0c;通过 Redis…