AttributeError: /lib/x86_64-linux-gnu/libbcc.so.0: undefined symbol: bpf_module_create_b

ubuntu22.04-bcc源码编译安装 ubuntu22.04-bcc源码编译安装 LibDebuginfod编译安装 LuaJIT编译安装 阅读详情
AI摘要

文章描述了在Ubuntu22的虚拟机中,安装bcc工具后尝试运行python3版本的execsnoop时遇到的AttributeError,原因是libbcc.so.0库缺少bpf_module_create_b符号。作者通过检查python版本、libbcc库和python3的bcc库,发现是bcc库版本不匹配导致的问题。解决方案是将新编译的bcc库中的python3bcc模块复制到python3的库中,从而解决了问题。

AttributeError: /lib/x86_64-linux-gnu/libbcc.so.0: undefined symbol: bpf_module_create_b

背景

在Ubuntu22的虚拟机中,使用源码编译并安装好bcc工具库后,执行bcc工具python3 /usr/share/bcc/tools/execsnoop报错。

报错信息

报错信息如下:

root@ubuntu2204vm:/usr/share/bcc/tools# ./execsnoop
Traceback (most recent call last):
  File "/usr/share/bcc/tools/./execsnoop", line 23, in <module>
    from bcc import BPF
  File "/usr/lib/python3/dist-packages/bcc/__init__.py", line 27, in <module>
    from .libbcc import lib, bcc_symbol, bcc_symbol_option, bcc_stacktrace_build_id, _SYM_CB_TYPE
  File "/usr/lib/python3/dist-packages/bcc/libbcc.py", line 20, in <module>
    lib.bpf_module_create_b.restype = ct.c_void_p
    ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/ctypes/__init__.py", line 389, in __getattr__
    func = self.__getitem__(name)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/ctypes/__init__.py", line 394, in __getitem__
    func = self._FuncPtr((name_or_ordinal, self))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: /lib/x86_64-linux-gnu/libbcc.so.0: undefined symbol: bpf_module_create_b

解决方法

网上的目前的解决办法

主要还是python版本问题,将python2切换为python3。而我这边显然不是这个问题,因为我的机子上只有python3

复制已编译的bcc库中的python bcc库到python3的库中

cp -r /root/ebpf/bcc/build/src/python/bcc-python3/bcc/* /usr/lib/python3/dist-packages/bcc/

错误分析过程

报错的相关路径

根据报错信息,和报错相关的路径:
/lib/x86_64-linux-gnu/libbcc.so.0: bcc库采用的libbcc.so.0
/usr/lib/python3/dist-packages/bcc: 报错的bcc库

python版本检测

使用的均为python3,没有python2,所以不存在版本问题

# update-alternatives --config python
There are 2 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                 Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3.11   2         auto mode
  1            /usr/bin/python3.10   1         manual mode
  2            /usr/bin/python3.11   2         manual mode

libbcc库检查

# ls -lh /lib/x86_64-linux-gnu/ |grep libbcc
-rw-r--r--  1 root root  5.0M May  1 19:34 libbcc.a
-rw-r--r--  1 root root  1.5M May  1 19:33 libbcc_bpf.a
lrwxrwxrwx  1 root root    15 Jan 18  2021 libbcc_bpf.so -> libbcc_bpf.so.0
lrwxrwxrwx  1 root root    20 May  1 19:35 libbcc_bpf.so.0 -> libbcc_bpf.so.0.27.0
-rw-r--r--  1 root root   51K Jan 18  2021 libbcc_bpf.so.0.18.0
-rw-r--r--  1 root root  2.8M May  1 19:33 libbcc_bpf.so.0.27.0
-rw-r--r--  1 root root  243K May  1 19:33 libbcc-loader-static.a
lrwxrwxrwx  1 root root    11 Jan 18  2021 libbcc.so -> libbcc.so.0
lrwxrwxrwx  1 root root    16 May  1 19:35 libbcc.so.0 -> libbcc.so.0.27.0
-rw-r--r--  1 root root  3.3M Jan 18  2021 libbcc.so.0.18.0
-rw-r--r--  1 root root  105M May  1 19:34 libbcc.so.0.27.0

可以看到libbcc库的实际指向为:
libbcc.so.0 -> libbcc.so.0.27.0

根据报错内容,python库需要bpf_module_create_b,而libbcc.so.0.27.0中没有
可以通过以下命令查看:

# strings /lib/x86_64-linux-gnu/libbcc.so.0.27.0 |grep bpf_module_create_
bpf_module_create_c
bpf_module_create_c_from_string
bpf_module_create_c.cold
bpf_module_create_c_from_string.cold
bpf_module_create_c
bpf_module_create_c_from_string

此时注意到上一个步骤中的libbcc.so.0.18.0,同样进行bpf_module_create_b检查

# strings /lib/x86_64-linux-gnu/libbcc.so.0.18.0 |grep bpf_module_create_
bpf_module_create_b
bpf_module_create_c
bpf_module_create_c_from_string

发现存在bpf_module_create_b,即便不进行时间对比,通过版本号0.18.0与0.27.0也知道,
python3的bcc库竟然请求的是老版(0.18.0)的bcc lib库

python3 bcc库检查

# ll  /usr/lib/python3/dist-packages/bcc/
total 212
drwxr-xr-x   3 root root  4096 May  2 00:13 ./
drwxr-xr-x 156 root root 12288 May  1 19:36 ../
-rw-r--r--   1 root root  2566 Jan 18  2021 containers.py
-rw-r--r--   1 root root 20914 Jan 18  2021 disassembler.py
-rw-r--r--   1 root root 58581 Jan 18  2021 __init__.py
-rw-r--r--   1 root root 12951 Jan 18  2021 libbcc.py
-rw-r--r--   1 root root  4693 Jan 18  2021 perf.py
drwxr-xr-x   2 root root  4096 May  1 19:37 __pycache__/
-rw-r--r--   1 root root  9656 Jan 18  2021 syscall.py
-rw-r--r--   1 root root 40588 Jan 18  2021 table.py
-rw-r--r--   1 root root  1604 Jan 18  2021 tcp.py
-rw-r--r--   1 root root  9102 Jan 18  2021 usdt.py
-rw-r--r--   1 root root  4904 Jan 18  2021 utils.py
-rw-r--r--   1 root root    23 Jan 18  2021 version.py

根据文件时间可以确定,确实都是21年的老库,遂进行替换,先查找bcc源码中的bcc python库:

# find / -name libbcc.py -ls 2>/dev/null
  2360806  16 ... 12951 Jan 18  2021 /usr/lib/python3/dist-packages/bcc/libbcc.py
  1054215  16 ... 14561 May  1 19:32 /root/ebpf/bcc/build/src/python/bcc-python3/build/lib/bcc/libbcc.py
  1053905  16 ... 14561 May  1 19:32 /root/ebpf/bcc/build/src/python/bcc-python3/bcc/libbcc.py
  1052874  16 ... 14561 May  1 19:31 /root/ebpf/bcc/src/python/bcc/libbcc.py 

因为笔者对python并不算熟悉,不知道如何进行正确替换,所以直接进行的复制
cp -r /root/ebpf/bcc/build/src/python/bcc-python3/bcc/* /usr/lib/python3/dist-packages/bcc/

替换后再次执行bcc命令,问题成功得到解决,效果如下:

# ./execsnoop
PCOMM            PID     PPID    RET ARGS
sshd             7924    909       0 /usr/sbin/sshd -D -R
00-header        7928    7927      0 /etc/update-motd.d/00-header
uname            7929    7928      0 /usr/bin/uname -o
uname            7930    7928      0 /usr/bin/uname -r
uname            7931    7928      0 /usr/bin/uname -m
【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月10日 前文:SABRE 3D系列机台简介本章节详细阐述了在维护期间锁定电气、机械、热力学及重力组件以及化学管线输入的锁定操作流程,旨在降低人员受伤风险。p42~p55。 阅读详情

相关推荐

嵌入式开发:用状态机实现STM32按键消抖,告别阻塞延时

在嵌入式系统开发中,处理异步事件和实时响应是核心挑战。状态机作为一种强大的编程模型,通过定义有限的状态、事件和状态转换规则,将复杂的、非线性的控制逻辑转化为清晰、确定且易于维护的代码结构。其技术价值在于实现逻辑的模块化、异步化和非阻塞化,能显著提升代码的可读性、可扩展性和系统实时性。这一思想广泛应用于协议解析、用户界面交互、传感器数据处理等场景。本文以嵌入式开发中基础的按键处理为例,针对传统“延时消抖”方法会阻塞主循环、影响实时性的痛点,深入讲解如何运用状态机思维重构按键消抖逻辑。通过分析状态机的核心三要素

weixin_33377602的博客 339

AttributeError: /usr/lib/x86_64-linux-gnu/libbcc.so.0: undefined symbol: bpf_module_rw_engine_enable

AttributeError: /usr/lib/x86_64-linux-gnu/libbcc.so.0: undefined symbol: bpf_module_rw_engine_enabled

qq_44927248的博客 1539

MTK Linux Charger驱动分析(二) - power_supply_core.c

的核心作用可以概括为:提供统一的电源管理框架;管理电源设备注册、属性访问、事件通知;封装sysfs 接口和 uevent 通知,屏蔽硬件细节;驱动开发者只需要实现,不关心底层通知和接口细节。简单来说,它是电源子系统的“大脑和中枢”,具体的电池/充电器只是“信息源”。

iTom1900 1488

AttributeError: /usr/lib/x86_64-Linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup

完美解决!谢谢这位博主~ http://blog.csdn.net/blackfrog_unique/article/details/60320737

hackerie的博客 3万+

【Unity】ABB CRB 15000 外部引导运动实战:从配置到实时控制

本文详细介绍了ABB CRB 15000协作机器人的外部引导运动(EGM)功能在Unity环境中的实战应用。从RobotStudio配置到Unity实时通信架构,再到EGM运动控制技巧和问题排查,全面解析如何实现机器人的高精度实时控制。通过实际案例展示EGM技术在精密装配等场景中的显著效果,帮助开发者快速掌握这一先进技术。

weixin_29057695的博客 445

图解说明JLink驱动与目标板电源匹配的关键细节

深入讲解JLink驱动安装及使用过程中,如何正确匹配目标板电源,避免常见通信故障。通过图解方式清晰展示关键连接细节,确保调试稳定可靠,是嵌入式开发中不可或缺的实战经验分享。

weixin_42173218的博客 431

阿里云安装centos及python

centos与python centos8 python3.6.8 pip3 install django-haystack==2.8.1 报错 pip3 install setuptools_scm ———————————————— 版权声明:本文为优快云博主「长大了好烦」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://bl...

weixin_42651025的博客 883

Cursor赋能Qt C++:从环境配置到项目构建的AI开发新范式

本文详细介绍了如何利用Cursor工具链提升Qt C++开发效率,从智能环境配置到CMake项目构建的全流程实践。通过AI辅助编程、Qt生态优化及高级调试技巧,开发者可快速完成从传统开发到AI驱动的新范式转换,显著缩短项目搭建时间并提升代码质量。

weixin_30329623的博客 546

libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b

安装openssl引起的ssh,yum,crontab命令错误:libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b

qq_27608711的博客 6041

手把手教你用DCA1000EVM解析IWR6843毫米波雷达数据(附MATLAB代码)

本文提供了一份详尽的实战指南,手把手教你使用DCA1000EVM采集并解析TI毫米波雷达IWR6843的原始数据。内容涵盖硬件连接配置、mmWave Studio参数设置、LVDS数据流结构解析,并附有核心MATLAB代码,详细演示了从原始二进制文件到距离-速度谱的信号处理全链路,帮助开发者快速掌握数据解析与处理的关键步骤。

terraform7cloud的博客 227

SAP-PP MD04详解一

MD04是SAP运行MRP后的结果查询事务码,其他功能强大,标准功能比如:查询/更改物料主数据、转换计划订单到生产订单/采购申请、查询/更改各个MRP元素对应的单据等等。而且还可以附加标准的菜单或者自定义添加事务码上去。老铁将做一个MD04详细说明系列,本篇为第一篇之MRP元素说明。 我们来看看MD04基本界面 可以看到主要的数据显示界面,有日期、MRP元素、MRP元素数据、再计划日期、收货/需求、可用数量、工厂、库存地点等栏位。光标定位到MRP元素列,按F1即可看到各类MRP元素的说...

weixin_52158549的博客 1万+

【Error】sh4d0ws0ck4 常见错误:AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol

问题: 由于openssl升级弃用了函数,导致ssserver开启失败。 由于在openssl1.1.0版本中,废弃了EVP_CIPHER_CTX_cleanup函数。 EVP_CIPHER_CTX_init() remains as an alias for EVP_CIPHER_CTX_reset(). 部分日志: AttributeError: /usr/lib/x86_64...

think_ycx的专栏 4927

SAP 采购订单入库——移动类型

业务场景:采购入库,实物入库至仓库,然后系统同步过账。MIGO:收货、采购订单。 MVT:101 入库,---库存增加。 MVT:移动类型,就是代表业务场景,(比如入库、发货,成本中心发、工单发、报废、盘赢、盘亏等等) 移动类型 1、正向采购入库:101 2、反向冲销(MIGO)102:与101相反,用于错误操作的反向冲销。参考原凭证,全部进行一...

willieyuan的博客 7779

eBPF-1-基础与技术储备

eBPF-Linux性能优化的超能力

文杰的博客 2359

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python 调用C生成 SO库报错:undefined symbol

使用C++实现某些算法功能后,供python调用时出错: AttributeError: /..../libHessian4Nii.so: undefined symbol: callVesselSegNii 通过度娘得知是因为c++编译后的文件会把函数名重命名(这是便于实现重载功能)了,导致脚本调用时找不到函数名。 解决方法为使用extern "C"将需要暴露的头文件括起来即可。示例如下: extern "C"{ int callVesselSegNii(char* or...

luckwsm的专栏 4899

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Centos 8 /lib64/libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b #1127

Centos 8 /lib64/libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b#1127 openssl编译完成后,使用sudo su提示如上命令,并且SSH无法连接。 centos8,openssl默认为1.1.1b,编译安装的为1.1.1k 原因如下: https://blog.csdn.net/qq_36428903/article/details/114025840 这个问题的原因是,red.

hzcm1984的博客 2万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

(2019.10.27已解决)Linux启动报错:undefined symbol: EVP_CIPHER_CTX_cleanup

如题所示。 报错原因是由于openssl升级到1.1.0之后导致[^1]。 找到openssl.py find \ .name openssl.py 查找openssl.py所在路径,找到openssl.py文件。 用vim打开 替换cleanup 将文中libcrypto.EVP_CIPHER_CTX_cleanup替换为libcrypto.EVP_CIPHER_CTX_reset...

漫步量化 4823

/x86_64-linux-gnu/liblapacke.so.3: undefined symbol: xxxx 的参考解决方法

/x86_64-linux-gnu/liblapacke.so.3: undefined symbol: xxxx 的参考解决方法

qq_39779233的博客 816

BPF之前端工具BCC与bpftrace

BPF之前端工具BCC以及bpftrace、bpftrace编程语法基础

大吉 3242

linux动态库so调用外部so,运行时出现undefined symbol

出现这种问题,一般为某工程的动态链接库出现问题,一般为以下解决办法: 一、当前工程的.so文件和生成该.so文件的工程代码不一致,当前.so文件中不包含工程代码中的某些函数。例如我的工程代码中有NdarrytoImage()这个函数,但是我使用的.so生成时却没有该函数,则在编译的时候不包含NdarrytoImage函数,则会抛出no ndarrytoimage undefined symbol...

一新新的小白的博客 4万+

动态库编译通过,调用动态库函数运行出现undefined symbol

编了一个动态库,写测试程序去调用动态库,程序编译通过,调用动态库里函数出错,通过加上动态库相关依赖库以及 extern“C”声明解决该错误以下,详细说明解决经过: 首先,刚编译好的动态库需要配置好配置文件,测试编译为可执行程序时需要正确的链接动态库,在这些都没问题时,编译通过,运行时报undefined symbol错误时,往下看看,或许能给你解决 1.现象分析: 错误如图: 这三个函数都是问题动态库里函数,程序调用动态库应该是通过程序的符号表去找到这个函数再去调用,出现undefined symbol错

yuan 1万+

LibVA 编译报错:vainfo: symbol lookup error: /lib/x86_64-linux-gnu/libva-x11.so.2: undefined symbol: va_f

LibVA 编译报错:vainfo: symbol lookup error: /lib/x86_64-linux-gnu/libva-x11.so.2: undefined symbol: va_fool_postp。

strongjay的博客 574

BCC入门

简介 BPF编译器集合(BPF Compiler Collection,简称BCC)。项目地址https://github.com/iovisor/bcc,是一个用于创建高效内核跟踪和操作程序的工具包,包括几个有用的工具和示例。它利用了扩展的 BPF(伯克利包过滤器),正式名称为 eBPF。 BCC 使 BPF 程序更易于编写,使用 C 中的内核工具(并包括围绕 LLVM 的 C 包装器),以及 Python 和 lua 中的前端。它适用于许多任务,包括性能分析和网络流量控制。 BCC还包含多个可以直接使用

成长之路 1789

【解决问题】【 error: ‘/usr/lib/x86_64-linux-gnu/libGL.so‘】【库的链接】【工具apt-file-用来解决linux 下任何 lib 文件缺失】

这个问题是我在slam14讲的第十二讲的RGBD稠密建图中使用pcl的时候报错的。

qq_45954434的博客 1万+

【linux】程序找不到动态库.so的解决办法|查看.so动态库信息|.so动态库加载顺序

方法一:添加环境变量 子招数1. 添加当前用户当前终端的环境变量-临时 export LD_LIBRARY_PATH=/home/czd/... #.so file path 子招数2. 添加当前用户的环境变量 修改~/.bashrc文件,在其末尾,添加环境变量 vim ~/.bashrc export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/czd/... #.so file path 使其生效, source ~/.bashrc 如不能生

我的笔记本 1万+
上一篇: Windows防火墙 命令行批量阻断攻击IP(非范围)
下一篇: error: failed to run custom build command for `blazesym v0.1.0`
libocdf
博客等级 码龄16年 544粉丝 6原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值