ARM交叉编译BindToInterface缺失sys/socket.h头文件问题求助
交叉编译BindToInterface报错解决方案
报错根因
你当前使用的arm-none-eabi-gcc是面向裸机ARM平台的交叉编译器,默认不包含Linux系统特有的POSIX头文件与C库,sys/socket.h属于Linux网络编程的系统级头文件,裸机编译链没有提供该文件,因此不是单纯缺少依赖包的问题。
解决方案
- 更换适配Linux目标平台的交叉编译器
如果你要编译的目标是运行Linux系统的ARM设备,需要安装对应架构的ARM Linux交叉编译链,不同发行版的安装包名如下:- Debian/Ubuntu系列:32位ARMv7及以下平台安装
gcc-arm-linux-gnueabihf,64位ARMv8平台安装gcc-aarch64-linux-gnu - RHEL/CentOS/Fedora系列:32位ARM平台安装
arm-linux-gnueabihf-gcc,64位ARM平台安装aarch64-linux-gnu-gcc
- Debian/Ubuntu系列:32位ARMv7及以下平台安装
- 修改编译命令替换编译器前缀
以32位ARM Linux目标为例,编译命令调整为:
若为64位ARM Linux目标,将编译器前缀替换为arm-linux-gnueabihf-gcc -nostartfiles -fpic -shared bindToInterface.c -o bindToInterface.so -ldl -D_GNU_SOURCEaarch64-linux-gnu-gcc即可。 - 特殊场景说明
如果你确实需要为裸机ARM平台编译该项目,该项目本身依赖Linux的动态链接机制、socket系统调用,原生不支持裸机平台,无法直接编译,需要先完成代码移植适配后再操作。
内容的提问来源于stack exchange,提问作者baka
相关产品推荐
相关产品推荐

