Ubuntu下Gnuradio安装避坑指南——从依赖配置到模块开发

艰辛的Gnuradio搭建之路——Ubuntu安装配置gnuradio 整理了一下Ubuntu18.04下的以及我遇到的几个常见和罕见的bug。 1.Gnuradio 安装 首先推荐一些依赖。 sudo apt-get -y install git swig cmake doxygen build-essential libboost-all-dev libtool libusb-1.0-0 libusb-1.0-0-dev libudev-dev libncurses5-dev libfftw3-bin libfftw3-dev libfftw3-doc libcppunit 阅读详情

1. 环境准备:别急着敲命令,先想清楚你要什么

每次看到有人一上来就复制粘贴一长串 apt-get install 命令,我都想喊停。在Ubuntu上安装Gnuradio,第一步绝对不是安装,而是规划。这就像装修房子,你得先想好要几个房间、什么风格,再去找材料和工人。直接开干,后面大概率要返工,甚至“砸墙重来”。

首先,你得明确你的使用场景。你是无线电爱好者,想玩玩SDR接收广播信号?还是通信专业的学生,需要用它来做课程实验?或者是研究人员,要基于它开发新的信号处理算法?不同的场景,决定了你后续的版本选择和依赖配置的复杂程度。如果只是入门体验,那么用Ubuntu官方仓库里最稳定的版本就足够了,省心省力。但如果你想用上最新的功能,或者你的硬件(比如某些特定的SDR设备)需要新版本驱动,那就得考虑从PPA或者源码编译了。

其次,Ubuntu版本和Gnuradio版本的匹配是个隐形的大坑。我见过太多人在Ubuntu 22.04上硬装一个很老的Gnuradio 3.7,结果各种库冲突,编译报错能看一整天。一般来说,较新的Ubuntu LTS版本(如20.04, 22.04)会自带或通过PPA提供较新的Gnuradio版本(如3.8, 3.9)。而如果你坚守Ubuntu 18.04,那官方源可能就只到3.7了。我的建议是,除非有特殊兼容性要求,尽量使用较新的Ubuntu LTS搭配其对应的主流Gnuradio版本,这样社区资源多,踩坑了也容易找到解决方案。

最后,给自己留条“后路”。我强烈建议在开始之前,为你的Ubuntu系统做一个快照(如果你用虚拟机)或者用timeshift等工具做个系统备份。安装过程会动很多系统级的库,万一搞崩了,能一键还原,比重装系统省下好几个小时。磨刀不误砍柴工,花十分钟想清楚这些,能帮你避开后面80%的麻烦。

2. 依赖安装:那一长串命令背后的门道

好了,现在你决定要安装了。网上搜到的教程,第一件事就是让你复制一段长得吓人的apt-get install命令,里面密密麻麻几十个包。很多人不明就里,直接粘贴执行,运气好就过了,运气不好就是满屏红色报错。今天咱们就来拆解一下,这些依赖到底是干嘛的,以及怎么更优雅地处理它们。

那一大串依赖,其实可以分成几大类:

  1. 基础构建工具:像cmake, g++, build-essential, git, swig这些。这是编译任何C/C++项目的基石,相当于你盖楼需要的钢筋水泥和搅拌机。
  2. 核心库依赖:这是Gnuradio的“骨架”和“肌肉”。libboost-all-dev(C++扩展库)、libcppunit-dev(单元测试)、libfftw3-dev(快速傅里叶变换,信号处理核心)libusb-1.0-0-dev(USB设备通信)。少了它们,Gnuradio根本编译不起来。
  3. 图形界面支持:Gnuradio Companion(GRC)那个拖拽式的图形界面,靠的是Qt和PyQt。所以需要qt4-default或qt5-default(取决于版本)、python3-pyqt5、libqwt-dev(绘图控件)等。如果你想用命令行模式,这些可以酌情精简,但GRC是新手神器,建议装上。
  4. Python支持:Gnuradio大量使用Python进行胶水连接和模块开发。需要Python开发头文件python3-dev,以及科学计算套件python3-numpy, python3-scipy等。
  5. 可选或硬件相关依赖:比如libsdl1.2-dev(音频)、libgsl-dev(GNU科学库)、libzmq3-dev(ZeroMQ消息队列,用于远程控制)。如果你有特定的硬件,如HackRF、RTL-SDR,可能还需要对应的libhackrf-dev或librtlsdr-dev。

那么,怎么安装更聪明呢?不要一次性复制所有命令。我建议分两步走: 首先,安装最核心的构建工具和库:

sudo apt update
sudo apt install -y cmake g++ build-essential libboost-all-dev libfftw3-dev libcppunit-dev libusb-1.0-0-dev

执行顺利的话,再安装图形界面和Python相关依赖。你可以利用Ubuntu的apt包组功能,或者参考Gnuradio官方Wiki上针对你特定Ubuntu版本的依赖列表。如果遇到“无法定位软件包”的错误,大概率是包名在Ubuntu版本间有变化,比如python-qt4变成了python3-pyqt5。这时候去官方文档查证是最靠谱的。

3. 安装方式抉择:APT、PPA还是源码编译?

依赖搞定,正式安装Gnuradio本体。主流就三条路,各有优劣,我帮你分析一下。

方案A:APT官方仓库(最省心,但可能版本旧) 命令最简单:sudo apt install gnuradio。系统会从Ubuntu自己的软件源安装一个经过充分测试、与当前系统兼容性最好的版本。对于Ubuntu 20.04,这通常是Gnuradio 3.8;对于22.04,可能是3.9或3.10。优点是极其稳定,几乎不会出问题。缺点是版本可能不是最新的,一些前沿的OOT(Out-of-Tree)模块可能要求更新版本。如果你是初学者,或者追求系统纯净稳定,这是我首推的方式。

方案B:添加PPA安装(兼顾新与稳) 如果你需要比官方源更新的版本,比如在20.04上用3.9,Gnuradio官方维护了PPA(个人软件包存档)。这是我最常用的方式。以安装3.9版本为例:

sudo add-apt-repository ppa:gnuradio/gnuradio-releases-3.9
sudo apt update
sudo apt install gnuradio

这里有个大坑! 就像原始文章里提到的,add-apt-repository命令千万不要执行多次,不要同时添加3.8和3.9的PPA。否则apt会看到两个源都有gnuradio包,它可能安装版本号更高的那个,也可能导致依赖混乱。如果不小心加多了,记得去/etc/apt/sources.list.d/目录下,删除对应的.list文件,再执行apt update。PPA方式的优点是版本较新,且由官方打包,相对可靠。缺点是依然受限于Ubuntu基础库的版本。

方案C:源码编译安装(最灵活,也最折腾) 从GitHub拉取源码,自己用cmake配置、make编译。这是终极方案,也是坑最多的方案。

git clone https://github.com/gnuradio/gnuradio.git
cd gnuradio
git checkout v3.10.0.0 # 切换到某个稳定版本标签
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=/usr/bin/python3 ..
make -j$(nproc) # 使用所有CPU核心并行编译
sudo make install
sudo ldconfig

优点:你可以安装任何版本(包括最新的开发分支),可以深度定制编译选项(如关闭不需要的组件、优化指令集)。缺点:耗时极长(在我的老机器上编译过一小时),对系统环境要求苛刻,容易在cmake阶段因找不到依赖而失败,并且安装到/usr/local可能和系统包产生冲突。仅推荐给有明确版本需求、或需要修改Gnuradio内核代码的进阶用户。新手请远离,它会消耗你大量的时间和耐心。

4. 验证安装与常见“翻车”现场

安装过程没有报错,就成功了吗?不一定。我们需要进行验收测试。最直接的方法是打开终端,输入gnuradio-companion,看看GRC图形界面能否正常启动。或者输入python3,进入交互环境,尝试import gnuradio,看是否有错误。

在这个过程中,你可能会遇到以下几个经典的“翻车”现场:

现场一:启动GRC报错,提示“找不到GLIBCXX_3.4.xx”或类似动态链接库错误。 这通常是编译器版本不匹配造成的。你用新版本的PPA或源码编译了Gnuradio,但它依赖的新版C++标准库(libstdc++.so.6)在你系统中不存在。解决方法是升级libstdc++6:sudo apt install libstdc++6。如果还不行,可以手动查找find /usr -name "libstdc++.so*",看看有没有更高版本的库文件,并通过设置LD_LIBRARY_PATH环境变量来指向它(这是临时方案,治标不治本)。

现场二:Python导入错误,提示“ModuleNotFoundError: No module named ‘gnuradio’”。 这说明Gnuradio的Python模块没有正确安装到Python的搜索路径中。对于APT或PPA安装,这很少见。对于源码编译安装,这几乎是必现问题。因为默认的CMAKE_INSTALL_PREFIX是/usr/local,Python模块可能被装到了/usr/local/lib/python3.8/site-packages/,而你的系统Python可能默认查找/usr/lib/python3/dist-packages/。解决方案就是在cmake时指定安装前缀:

cmake -DCMAKE_INSTALL_PREFIX=/usr ..

或者,更优雅的方式是使用Python的pip来安装编译好的模块(如果支持),或者将/usr/local下的site-packages路径添加到PYTHONPATH环境变量中。

现场三:GRC能打开,但工具箱里空空如也,或者加载流程图时核心模块丢失。 这可能是因为Gnuradio的模块注册信息(通常位于/usr/share/gnuradio/grc/blocks/)没有被正确扫描。可以尝试在终端运行gnuradio-config-info --prefix查看安装路径,并检查上述目录是否存在。有时需要重启一下GRC,或者运行sudo ldconfig刷新动态库缓存。

5. 模块开发入门:打造你的第一个“积木”

Gnuradio真正的威力在于它的可扩展性。你可以用C++或Python创建自己的信号处理模块(OOT模块),然后像使用内置模块一样在GRC里拖拽。官方提供了强大的脚手架工具——gr_modtool。但用它创建第一个项目时,你很可能就会掉进原始文章提到的那个“UTF-8”坑里。

当你兴致勃勃地执行gr_modtool newmod my_awesome_filter后,可能看到一堆关于模板文件编码的Python错误。这是因为/usr/share/gnuradio/modtool/templates/下的模板文件,在某些系统环境下可能被错误地读取。修复方法正如原文所说:

cd /usr/share/gnuradio/modtool/templates/gr-newmod
sudo py3clean .

这个命令会清理这些模板文件的Python字节码缓存(__pycache__),强制下次使用源码。执行完后再创建项目,就顺畅了。

创建项目后,你会得到一个结构清晰的目录树。假设我们的模块叫myfm,里面包含一个python/目录(Python模块代码)和一个grc/目录(GRC的YAML描述文件)。接下来,我们用gr_modtool add -t sync -l python来添加一个同步处理模块,命名为demod。这会自动生成python/demod.py和grc/myfm_demod.block.yml两个文件。

YAML文件是模块的“身份证”和“使用说明书”,它定义了模块在GRC中的名称、输入输出端口类型和数量、可调参数等。你需要仔细配置它。而.py文件就是模块的实际逻辑。Gnuradio为你生成了一个骨架,核心是work函数,输入数据在input_items里,处理完的结果要放到output_items里,并返回处理了多少个数据项。比如一个简单的增益模块,work函数里可能就是一句output_items[0][:] = input_items[0] * self.gain。

6. 编译、安装与调试:让自定义模块跑起来

代码写好了,怎么让它变成GRC里能用的一个方块呢?这就需要编译安装。进入你的模块目录,执行标准的CMake流程:

mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make -j4
sudo make install
sudo ldconfig

这里再次强调-DCMAKE_INSTALL_PREFIX=/usr的重要性,它能确保模块被安装到系统标准路径,避免找不到模块的尴尬。sudo ldconfig刷新动态库链接。

安装成功后,重启GRC,你应该能在左侧模块树里找到你自己的模块类别(比如[myfm]),并把它拖到工作区。但是,事情往往没那么顺利。最常见的错误是:模块能看见,但运行流程图时报错“ImportError: No module named ‘myfm’”。

这说明Python运行时找不到你的模块。首先,确认sudo make install时的输出,看你的myfmPython包被安装到了哪里。常见位置是/usr/lib/python3/dist-packages/或/usr/local/lib/python3.8/site-packages/。你可以通过Python命令python3 -c "import sys; print(sys.path)"查看Python的搜索路径。如果安装路径不在其中,你就需要设置PYTHONPATH环境变量,或者在代码中修改sys.path。对于系统级安装,我更推荐在cmake时就用-DCMAKE_INSTALL_PREFIX=/usr确保装对地方。

调试模块时,不要总在GRC里跑整个流程图。可以单独为你的模块写一个小型Python测试脚本,直接导入并调用它。这样能更快地定位问题是出在算法逻辑、数据格式还是接口定义上。用好Python的pdb调试器或者简单的print语句,能极大提升排错效率。

7. 进阶避坑与性能优化

当你跨过了安装和基础开发的门槛,接下来可能会关注如何用得更好、更高效。这里分享几个进阶点的经验和坑。

关于UHD(USRP硬件驱动)的安装:如果你使用Ettus USRP系列硬件,需要单独安装UHD。强烈建议从源码编译安装UHD,而不是用apt安装。因为源码安装能获得最新版本,对新型号支持更好,而且可以灵活指定安装路径。记得在安装UHD后,再重新配置和编译Gnuradio,以便其启用UHD支持(cmake时可能会自动检测到)。

GRC流程图卡顿或占用CPU过高:Gnuradio是实时流处理系统,设计不当会非常耗资源。首先,检查你的采样率设置是否合理,过高的采样率会产生海量数据。其次,在流程图中合理使用“流量控制”模块,如“Throttle”(节流阀),来限制数据流速,模拟真实硬件速率,避免无意义地空跑吃满CPU。对于复杂处理,考虑将部分算法移到C++模块中实现,Python虽然方便,但计算密集型任务的效率远低于C++。

模块开发中的线程安全与内存管理:如果你开发的是异步消息处理模块或使用了标签流,需要特别注意线程安全。Gnuradio的调度器是多线程的。另外,在C++模块中,要小心处理指针和内存分配,避免内存泄漏。在Python模块中,虽然垃圾回收机制能帮忙,但对于大块数据的复用(比如在work函数中),使用numpy数组的视图(view)而非复制(copy),可以显著提升性能。

保持环境的可复现性:这是很多个人开发者和实验室容易忽略的一点。你今天在电脑上成功安装和开发了一套东西,换台机器或者半年后重装系统,可能就完全配不出来了。我的习惯是,将整个安装过程(包括所有执行的命令、下载的源码版本、关键的配置参数)写成一个详细的脚本(Shell脚本或Python脚本),并注释清楚每一步的目的。对于自定义模块,使用git进行版本控制,并在README.md中清晰说明依赖的Gnuradio版本和安装步骤。这不仅能帮助未来的自己,也能让合作者快速上手。

二:Ubuntu 18.04安装UHD和GNURadio Ubuntu 18.04安装UHD和GNURadio及github下载问题解决方案 阅读详情

相关推荐

【GNURadio实验报告】实验1-配置Ubuntu22.04+GNURadio开发调试环境

记录Ubuntu22.04+GNU Radio3.10开发环境的配置过程

WebTrapの笔记 4914

Ubuntu下安装GNURadio指南:开源信号处理利器,轻松上手

Ubuntu下安装GNURadio指南:开源信号处理利器,轻松上手 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在开源信号处理领域,GNURadio无疑是一个强大的工具。它是一个开源的信号处理软件框架,能够支持广泛的通信系统开发。对于Ubuntu用户来说,安装GNURadio的过程可能充满挑战。本文档提供了一份详尽的安装教程,旨在帮助用户克服安装障碍,快速上手GNU...

gitblog_06701的博客 364

Ubuntu18.04安装GNURadio3.8

1.系统版本为Ubuntu18.04,下载GNURadio3.8的版本,下载地址为:https://www.gnuradio.org/releases/gnuradio/。下载完成后解压。 2.官网安装教程链接:https://wiki.gnuradio.org/index.php/UbuntuInstall#Building_GNU_Radio_on_Ubuntu_Linux。安装前需要安装依...

u011441044的博客 1万+

Ubuntu下安装GNURadio指南

Ubuntu下安装GNURadio指南 去发现同类优质开源项目:https://gitcode.com/ 简介 本文档旨在为Ubuntu用户提供一个详尽的GNURadio安装教程。GNURadio是一款开源的信号处理软件框架,它提供了广泛的工具和库,用于开发各种通信系统。对于初学者来说,安装GNURadio可能会感到困惑和困难。作者通过自己的摸索和实践,总结出了一套安装流程,希望这份指南能够帮助到...

gitblog_06758的博客 900

在Ubuntu上面安装支持LimeSDR的GNURadio

在ubuntu上安装能支持lime的gnuradio,下面有介绍软件结构以及安装顺序。此文档完全参考官方文档。

kambit的博客 2万+

Ubuntu20.4安装gnuradio艰辛之路

Ubuntu20.4安装gnuradio的零基础艰辛之路

qq_44693140的博客 4459

Ubuntu 22.04LTS 安装UHD以及GNU radio来连接USRP

本文给出了Ubuntu 22.04LTS下安装UHD以及GNU radio的方法。

m0_46627932的博客 7409

Ubuntu20.04+GNURadio安装记录

这里写自定义目录标题1.1 安装Ubuntu 20.04.21.2 uhd和GNURadio 1.1 安装Ubuntu 20.04.2 直接下载ISO镜像,然后烧写,比较简单 1.2 uhd和GNURadio 直接使用ppa安装,安装了UHD的3.15和GNURadio 3.8.2。 先安装UHD:[https://files.ettus.com/manual/page_install.html],检查PPA地址[https://launchpad.net/~ettusresearch/+archive/u

ataber的博客 3020

Ubuntu 22.04 下安装uhd和gnuradio的快捷方法

在ubuntu安装 gnuradio的新办法

yhb408的博客 3222

从零开始搭建GNURadio开发环境:Ubuntu+USRP实战避坑指南

本文详细指导如何在Ubuntu系统上搭建GNURadio开发环境并适配USRP硬件,涵盖系统调优、依赖安装、驱动兼容性排查及实时性优化等关键步骤。特别针对USRP硬件识别、虚拟机配置等常见问题提供实战解决方案,帮助开发者高效构建稳定的软件定义无线电开发平台。

weixin_30752699的博客 558

使用Pybombs安装GNURadio

GNURadio安装 之前安装过几次,最近安装时又出现问题。果断记录安装过程,回馈社会! 一、工具 Ubuntu desktop 14.04(建议使用双系统) 官方安装也用过16.04,不过为了稳定性最好使用14.04 在这提供官方的测试live系统,只能装载在U盘使用,无法安装。 https://wiki.gnuradio.org/index.php/GNU_Radio_Li...

Patience 5299

Ubuntu18.04下Gnuradio3.8安装避坑指南:从依赖配置到模块开发全流程

本文提供了一份详尽的Ubuntu 18.04系统下Gnuradio 3.8的安装配置与模块开发全流程指南。内容涵盖从系统依赖库的精准安装、PPA源配置、典型环境问题解决,到使用gr_modtool从零创建自定义Python/C++模块的实战步骤,旨在帮助通信工程与SDR开发者一次性成功搭建稳定、可扩展的开发环境。

2a4s6d8f0g的博客 210

利用pybombs安装最新源码软件,包括gnuradio, uhd, hackrf, limesuite, gqrx, 以及各种gnuradio模块.

为了帮助大家更好的使用LimeSDR和GNURadio 测试安装环境:ubuntu 17.04推荐此方法安装gnuradio以及各种驱动和blocks pybombs介绍 安装pybombs 此命令安装最新版本的pybombs 添加 PyBOMBS recipes 配置安装prefix目录 安装gnuradio 运行gnuradio 安装uhd驱动 安装hackrf驱动 安装limesuite驱动

kambit的博客 6573

【基于官网教程的GNURADIO源码安装指导】

基于官方教程的gnuradio源码安装指导

weixin_45007877的博客 7026

Redhawk解析PAD / IOPAD的实现方法

Redhawk解析IOPAD的实现方法1. IOPAD DEF的概念说明2. 生成 IOPAD GDS文件3. 生成 IOPAD DEF文件4. Redhawk解析过程中读取IOPAD DEF 本文主要简述【Redhawk解析IOPAD】的实现原理方法,具体脚本没有放在这里。 1. IOPAD DEF的概念说明 2. 生成 IOPAD GDS文件 注: getinfo2IODEF.tcl 是基于innovus获取IOPAD的摆放信息以及库信息。 run_cerate_iopadgds.csh 是基于c

kobayashiyou的博客 3155

从零开始用QP框架开发STM32:事件驱动编程实战指南(附状态机设计技巧)

本文详细介绍了如何使用QP框架在STM32上实现事件驱动编程,包括状态机设计技巧和嵌入式开发实践。通过对比传统前后台系统和RTOS,展示了QP框架在资源占用、实时性和代码可维护性方面的优势,并提供了从环境搭建到高级状态机设计的完整指南。

h6i7j8的博客 1174

超详细 ubuntu18.04 安装 UHD 和 GNURadio

1.版本号 系统环境:ubuntu18.04 UHD:v3.14.1.0 GNU radio: v3.9 2.参考链接 在参考本教程之前,建议浏览下列参考链接,对安装过程能初步判断对与错,也能明白其中哪些步骤比较关键 (1)ettus官方教程:Building and Installing the USRP Open-Source Toolchain (UHD and GNU Radio) on Linux (2)gnuradio官方教程:InstallingGR (3)参考博客:ubuntu18.04安

weixin_41111187的博客 6903

深度学习之基于Pytorch手指静脉识别系统(

一、项目背景与目标手指静脉识别技术是一种新兴的生物特征识别技术,它依据人类手指中流动的血液可吸收特定波长的光线这一科学原理,利用手指内的静脉分布图像来进行身份识别。与传统的生物识别技术(如指纹识别)相比,手指静脉识别技术具有不易伪造、识别精度高、非接触性等特点,因此在安全性要求较高的场景(如金融、医疗、公安等)具有广阔的应用前景。本项目旨在利用PyTorch深度学习框架,构建一套高效、准确的手指静脉识别系统。

Q1744828575的博客 834

Ubuntu20.04安装UHD3.15+GNURadio3.8

这里对这段时间在Ubuntu20.04上安装UHD3.15+GNURadio3.8做一个记录,希望帮到更多的人。

qq_56587132的博客 5503

Dify 系列教程 | 第 6 篇:工作流入门 -- 用可视化方式编排 AI 逻辑

Dify 工作流是一个基于有向无环图(DAG)的可视化 AI 逻辑编排系统。你可以把多个处理步骤(节点)用连线串联起来,数据从起点流向终点,每经过一个节点就被处理一次。用一个类比来理解:如果单次 Prompt 调用是"一道菜",那工作流就是"一道完整的生产线" – 原材料(输入)进入流水线,经过清洗(预处理)、切配(数据转换)、烹饪(AI 推理)、装盘(格式化输出)等工序,最终产出成品。创建一个工作流类型的应用(或高级聊天类型),就会进入工作流编辑器。编辑器基于ReactFlow构建(

weixin_43674738的博客 121

把 ABAP SQL 窗口函数讲透:从 OVER 到 LEAD、RANK 与累计分析

ABAP SQL窗口函数在不丢失明细记录的前提下,为每行数据提供组内统计和排名功能。它通过OVER子句定义计算窗口,支持三类函数:聚合型(AVG/SUM等)、排名型(ROW_NUMBER/RANK等)和取值型(LEAD/LAG)。相比GROUP BY会合并多行数据,窗口函数保留原始记录同时附加计算结果,特别适合需要保留明细又要展示统计信息的业务场景,如销售排名、客户分层分析等。语法核心是OVER子句,通过PARTITION BY分组,ORDER BY排序,可灵活定义计算范围。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1274

解决ModuleNotFoundError: No module named ‘gnuradio‘

python自行安装好 一、安装GNURadio sudo apt-get update sudo apt-get install gnuradio 二、安装gr-mapper和gr-mediatools gr-mapper gr-mediatools sudo apt-get install cmake

QAQIknow的博客 1万+

openssl命令数据摘要详解(SM3、sha256、MD5、dss1、mdc2、ripemd160)

SM3是由中国密码学家设计的密码哈希函数,是中国国家密码管理局(National Cryptographic Authority,简称:CNCA)颁布的国家密码算法标准。SM3属于密码杂凑函数家族,它可以计算任意长度的消息并生成固定长度(256比特,即32字节)的哈希值。SM3生成的哈希值长度为256比特(32字节),不管输入消息的长度如何,输出始终是固定的。SM3将输入数据划分为512比特(64字节)的分组,并对每个分组进行处理。

N阶二进制的博客 4462
上一篇: Centos8系统中文环境配置指南:从字符集安装到应用适配
下一篇: MFC控件进阶:动态加载与显示BMP/PNG图片的实战技巧
code8
博客等级 码龄17年 65粉丝 1720原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值