嵌入式Linux · 高频面试题 · 工程实战
“在PC上gcc能编译,复制到开发板却运行不了”,是Linux岗位常见的实际问题。
面试回答先说这段
编译将C/C++源文件转换为目标文件,链接负责解析符号并生成符合目标ABI的可执行文件;交叉编译是让构建主机生成面向另一CPU架构和运行环境的程序。开发板运行失败还要检查架构、动态链接器、依赖库、权限和sysroot。
面试官继续追问时,按这个逻辑展开
01先分清四个基本阶段
预处理展开宏和头文件;编译阶段进行语义分析及优化;汇编产生目标文件;链接把目标文件与所需库组织成可执行文件。实际gcc命令常把多阶段一起调用。
02交叉编译不只是换个gcc名字
例如构建主机是x86_64,目标板是ARM,必须使用对应架构与ABI的工具链,并确保编译时链接的头文件与库与目标根文件系统兼容。还需区分glibc、musl、硬浮点/软浮点ABI等。
03开发板无法运行怎样查
先用file/readelf核对ELF架构和解释器,用ldd(在合适运行环境中)或readelf检查共享库依赖,再查执行权限、动态链接器实际路径、目标系统位宽和库版本。不要只把“not found”理解成文件不存在,它也可能是解释器缺失。
04如何避免发布时才发现问题
采用可复现的构建配置,记录工具链、sysroot和目标板系统版本;在持续集成或发布前用目标板/仿真环境做基本启动及接口测试。
面试里容易踩的两个坑
认为编译通过就必定能在目标板运行。
把编译器、链接器、动态链接器混为一谈。
面试官可能再问一句
开发板显示No such file or directory,可执行文件明明存在,你会如何定位?

扫码关注






























