交叉编译mDNSResponder生成动态库so

本次以arm-linux-gnueabihf-gcc工具链举例进行交叉编译

1.下载源码

Shell 复制代码
# 这里使用gitte平台镜像仓库
git clone https://gitee.com/liujinghua-noedn/mdnsresponder.git
# 切换到具体标签版本
git checkout mDNSResponder-2881.0.25

2.当前mDNSResponder依赖mbed TLS,如果不需要,可以修改Makefile文件移除对它的依赖

Shell 复制代码
# 进入mDNSPosix目录
cd mdnsresponder/mDNSPosix

# 备份
cp Makefile Makefile.bak
# 移除 mbedtls.c
sed -i '/mbedtls\.c/d' Makefile
# 移除 -DPOSIX_HAS_TLS
sed -i 's/-DPOSIX_HAS_TLS//g' Makefile
# 移除 -lmbedtls -lmbedcrypto
sed -i 's/-lmbedtls//g; s/-lmbedcrypto//g; s/-lmbedx509//g' Makefile
# 清理多余空格(可选)
sed -i 's/  */ /g' Makefile

3.开始编译,指定交叉编译工具链

Shell 复制代码
make CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar RANLIB=arm-linux-gnueabihf-ar STRIP=arm-linux-gnueabihf-strip os=linux

CC:交叉编译器,将 .c 源代码编译成目标平台的 目标文件(.o) 或直接生成可执行文件/共享库。

AR:归档工具,将多个 .o 目标文件打包成 静态库(.a 文件) ,例如 libfoo.a

RANLIB:静态库索引生成器,为 .a 静态库生成 符号索引表,加快链接时的符号查找速度。

STRIP:剥离调试符号工具,从可执行文件或库中 移除调试符号、注释等非必要信息,减小文件体积。

os=linux:指定编译产物运行的目标平台。
注意: 如果还出现报错,建议执行make clena命令后重试。

4.编译完成后在当前目录下的build/prod下面有libdns_sd.so,可以使用file命令查看是否符合预期

Shell 复制代码
zhufahui@DESKTOP-SV44480:/mnt/d/workspace/mdnsresponder/mDNSPosix/build/prod$ file libdns_sd.so
libdns_sd.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=7a8dc7c8f18f3b2464fd1f8fe3c89816c5e20d56, stripped
相关推荐
鹿导的通天塔6 小时前
99%的人都不知道Codex 的 goal 神技!完整设置及提示词模板教学
后端
ltl7 小时前
Transformer 原论文怎么训出来的:8 张 P100、12 小时、warmup 4000 步
后端
why技术7 小时前
AI Coding开始进入第四个时代,我还没上车呢!
前端·人工智能·后端
程序猿追8 小时前
我搭了个网页工具:输入关键词,SERP API 自动吐出比价 Excel
后端
Lee川8 小时前
RAG 实战:从一篇掘金文章出发,拆解检索增强生成的全链路
前端·人工智能·后端
Lee川9 小时前
MCP 高德地图实战:当 AI 学会使用工具,一个协议如何重塑大模型的行动边界
前端·人工智能·后端
楼田莉子9 小时前
C++17新特性:__had_include/属性/求值顺序规则
开发语言·c++·后端
程序员cxuan9 小时前
Codex 把我家烂网给优化后,我 TM 直接原地起飞了。
人工智能·后端·程序员
IT_陈寒9 小时前
Redis批量删除踩了坑,原来DEL命令不是万能的
前端·人工智能·后端
叫我少年10 小时前
C# 命名空间与 using 指令 — 文件范围、全局导入、别名
后端