慢慢欣赏linux perf编译

本文详细解析了交叉编译中遇到的三个典型问题:编译警告、链接错误及路径缺失,并提供了具体解决方案,包括环境配置调整、库文件路径设置等,对从事嵌入式系统开发的工程师具有很高的参考价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题1:交叉编译失败
Makefile:509:***warning No libdw.h found or old libdw.h found, disables dwarf support. Please install elfutils-devel/elfutils-dev
解决方法:
发现在Makefilel里面根据编译和链接一个测试程序来确认是否有elf相关的API。可以将小程序的c拷贝出来实验。
($(shell sh -c "(echo '\#include <dwarf.h>'; echo '\#include <libdw.h>'; echo 'int main(void) { Dwarf *dbg; dbg = dwarf_begin(0, DWARF_C_READ); return (long)dbg; }') | $(CC) -x c - $(ALL_CFLAGS) -o $(BITBUCKET) $(ALL_LDFLAGS) $(EXTLIBS) "$(QUIET_STDERR)" && echo y"), y)
手工拷贝编译上报如下错误:
<stdin>:1:20 error:libelf.h:No Such File or directory 
在交叉编译工具下找文件:
find /opt/cross_tools -name elf.h
结果如下:/opt/croos_tools/... .../elf.h

于是将INCLUDE = -I /opt/croos_tools/... .../elf.h 加到CC里面

问题2:链接错误
:(.text+0x20):undefined reference to 'elf_begin'

解决方法:
grep -rn elf_begin /opt/croos_tools
结果如下: Binary file /opt/croos_tools/.. .../usr/lib/libelf/libelf.a matches
交叉编译器只有静态库
所以需要将
EXTLIBS = -lpthread -lrt -lelf -lm
增加后缀
EXTLIBS = -lpthread -lrt -lelf -lm -static -L. -lelf

问题3:路径找不到
c文件的.h找不到,需要将include <xxx.h>修改为"xxx.h",这一块需要研究

GCC编译过程与动态链接库和静态链接库
https://www.cnblogs.com/king-lps/p/7757919.html


Linux下gcc生成和使用静态库和动态库详解
https://blog.youkuaiyun.com/CSqingchen/article/details/51546784

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值