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
图文实录|大规模预训练模型:探讨与展望 第二期「澜舟分享会」我们邀请到来自复旦大学计算机学院邱锡鹏教授分享了“大规模预训练模型:探讨与展望”,本此演讲主要围绕大规模预训练语言模型展开讨论,并探讨大模型成功的原因、适用场景、未来发展方向以及身处大模型时代我们的机遇。 阅读详情

相关推荐

2024年上半年网络工程师下午真题及答案解析

位于MPLS域边缘、连接其他网络的LSR称为( 3 ),区域内部的LSR称为核心LSR(CoreLSR)IP报文进入MPLS网络时,MPLS入口设备分析IP报文的内容并为其添加合适的标签,所有MPLS网络中的LSR根据标签转发数据,当该IP报文离开MPLS网络时,标签由出口LER弹出。LSP的出口LER称为( 6 )。某高校网络拓扑如下图所示,两校区核心(CORE-1、CORE-2),出口防火墙(NGFW-1、NGFW-2)通过校区间光缆互联,配置OSPF实现全校路由收敛,两校区相距40km。

bsefef的博客 2471

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

告别编译噩梦:Vcpkg+Cmake一站式集成Tesseract-OCR C++开发环境(Windows)

本文详细介绍了如何在Windows系统上使用Vcpkg和CMake快速集成Tesseract-OCR C++开发环境,解决传统编译过程中的依赖问题。通过一键安装和自动化配置,开发者可以高效搭建OCR识别系统,支持中英文识别,并提供了常见问题的解决方案和进阶技巧。

weixin_29009339的博客 231

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万+

从仿真到部署:基于ROS2与Gazebo的UR5e机械臂全流程控制实践

本文详细介绍了基于ROS2与Gazebo的UR5e机械臂全流程控制实践,从环境准备、模型构建到控制器开发和仿真优化,最终实现真实机器人部署。通过实战案例和避坑指南,帮助开发者掌握机器人仿真与控制的关键技术,提升UR5e机械臂在物料分拣等任务中的性能与稳定性。

weixin_29184371的博客 288

Blender骨骼绑定实战:如何用IK控制器让角色动作更自然(附常见问题解决)

本文深入探讨了Blender中IK控制器的实战应用,旨在解决角色动作僵硬问题。通过对比IK与FK的核心差异,详细解析了IK链的构建、参数设置及极向目标的使用,并提供了控制器定制、IK/FK无缝切换等高级技巧,帮助动画师实现更自然、符合直觉的角色动画。

weixin_29243279的博客 437

阿里云安装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

USC EE450 CSCI455 CSCI571 Midterm 总结

EE450 Compter Network                1.历年Midterm考题。(更新至2017年spring,如果大家有新的资源欢迎编辑)                 google drive:https://drive.google.com/drive/folders/0B_LCDxpiiXZ1cUNReFpZZHo4NG8?usp=sharing

Small_hour 7112

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

WSL2下用QEMU模拟ARM开发板:从编译uboot到调试全流程(附常见错误解决)

本文详细介绍了在WSL2环境下使用QEMU模拟ARM开发板的完整流程,包括uboot编译、内核调试等关键步骤。通过QEMU模拟vexpress-a9开发板,开发者可以高效搭建嵌入式开发环境,解决常见错误并提升开发效率。

solidity8miner的博客 286

FINN vs GFED vs GFAS vs QFED:四大火灾排放清单实战对比(含Python数据处理代码)

本文针对GFED、FINN、GFAS、QFED四大主流火灾排放清单,提供了实战对比分析与Python数据处理代码。通过量化对比东南亚农业火点与亚马逊雨林大火两个典型场景,揭示了不同清单在时空分辨率、算法内核和应用场景上的核心差异,并给出了基于研究目标、区域和模型的清单选择决策框架,帮助研究人员为空气质量模拟或火灾影响评估挑选最合适的数据源。

s3t4u的博客 422

【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

目标跟踪与视频时序分析基础

两帧均有目标,却因快速移动导致检测框无重叠,仅靠交并比(IoU)无法维持身份关联。本文通过手算与纯Python实现最小跟踪流程,揭示IoU仅为位置线索,不能应对快速位移或遮挡。实验表明,即使目标真实存在,低重叠也会触发新编号。强调跟踪需结合运动预测、外观特征与阈值验证,避免误判。

Mr数据杨 2335

eBPF-1-基础与技术储备

eBPF-Linux性能优化的超能力

文杰的博客 2359

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

luckwsm的专栏 4899

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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万+

假人有限元模型

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

(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、付费专栏及课程。

余额充值