☰
Ubuntu从入门到实战:装机、双系统、apt配置与开发环境排错
2026/10/6 11:13:19 网站建设 项目流程

简介:面向Ubuntu新手与进阶用户的完整实践指南,系统覆盖系统安装、首次配置、终端与软件管理、性能调优、开发环境搭建及实战项目部署,能帮助初学者完成从入门到实际开发的关键跨越。压缩包仅含1个docx文档,体积21KB,内容精炼却信息密度高。文档以模块化方式组织,新手可学习官方ISO镜像制作、UEFI/传统BIOS分区建议、apt软件管理及系统更新,进阶用户可掌握systemd-analyze开机加速、htop/glances资源监控、Docker引擎安装与容器化开发、Python虚拟环境创建等技巧;实战部分提供基于LAMP的个人博客搭建、Bash自动化脚本、Docker Compose单机编排和Harbor私有仓库部署案例,并附有官方文档与社区教程导航以及依赖冲突、显卡驱动等常见问题排查方法。已有1124人学习该指南,适合希望通过Ubuntu进行日常使用或开发工作的读者按需查阅。

1. Ubuntu 这条线为什么值得从入门走到实战

网上到处是 Ubuntu 的安装截图,可真正劝退新手的往往不是安装那一步,而是装完后的第一个晚上:输入法打不出中文、gcc 编不过、SSH 连不上、显卡驱动卸载不掉。我这些年帮人排障,发现 Ubuntu 这条线的难点从来不在“装得上”,而在“配得顺、用得久、能实战”。下面按这个顺序讲:先从镜像选择和虚拟机、双系统起步,再解决中文输入法和日常软件,接着搭开发环境、过一遍高频故障排查,最后用一个真实小项目把整条链路串起来。内容适合刚接触 Linux 操作系统、准备把 Ubuntu 当主力开发机的人,也适合已经装好系统但总在某个坑里反复横跳的进阶用户。

2. 装机选型与最小可运行系统:虚拟机、双系统、apt 源一次配好

在动手装 Ubuntu 之前,先想清楚要跑在什么形态上。没接触过 Linux 操作系统的人,我一般不建议第一台就装双系统。引导项、分区表、显卡驱动这些概念叠在一起,很容易在第一个晚上就翻车。先用虚拟机把系统跑起来,把 apt、命令行、输入法这些基础问题消化掉,再决定要不要转成双系统或直接替换主力系统。

2.1 VMware 虚拟机安装 Ubuntu:最小命令与内存/磁盘参数

虚拟机是我给新手的第一个选择,也是我自己做实验的首选。VMware Workstation 里新建虚拟机,选 Ubuntu 64 位模板,CPU 给 2 核,内存 4 GB,磁盘 60 GB,这个配置跑 Ubuntu 24.04 LTS 桌面版足够流畅。镜像从 Ubuntu 官网下载,装完系统先别急着装软件,第一件事是安装虚拟化集成组件,否则窗口分辨率拉不满、剪贴板和文件拖拽都不通:

# 在 Ubuntu 虚拟机内部执行,更新索引并安装 open-vm-tools sudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktop

习惯上大家会去 VMware 菜单里点“安装 VMware Tools”,但对新版本 Ubuntu,我更推荐直接用 apt 里的 open-vm-tools。理由很简单:它跟随 Ubuntu 内核一起维护,不会出现 vmware-tools 与内核版本不匹配的问题。-y参数跳过确认,open-vm-tools-desktop提供分辨率自适应和共享剪贴板,纯命令行环境可以不装桌面版。

如果要在无人值守场景里把虚拟机拉起来,VMware Workstation 自带 vmrun 命令:

vmrun -T ws start "D:\VMs\Ubuntu2404\Ubuntu2404.vmx" nogui vmrun -T ws list

-T ws指定 Workstation 类型,nogui表示无界面启动。这个命令适合 CI 环境或批量测试,日常鼠标操作可以忽略。安装时建议选“最小安装”,下载时间短,不必要的预装软件少,后续自己按需装更干净。

2.2 双系统与重装:引导、分区和后悔药

虚拟机熟悉之后再考虑双系统。双系统唯一的铁律是先装 Windows 再装 Ubuntu,顺序反了 Windows 引导会覆盖 GRUB,开机直接进 Windows,Ubuntu 得靠修复引导才能回来。分区我一般这样分:EFI 分区 512 MB,swap 和内存大小差不多,根分区至少 40 GB,/home 可以不单独分,重装系统时数据还在,但备份习惯不能省。

分区下手之前先看磁盘现状:

# 列出磁盘和文件系统,双系统分区前必须确认目标磁盘 lsblk -f sudo fdisk -l /dev/nvme0n1

lsblk -f同时显示文件系统类型和挂载点,-l是列表模式,适合一眼看清整块磁盘。fdisk -l只读输出分区表,不会真的改磁盘,新手可以放心执行。

重装前的后悔药是包清单。很多人以为备份了 /home 就够了,实际上软件依赖全部要重装:

# 导出已安装包列表和手动安装的包,重装后按清单恢复 dpkg --get-selections > ~/dpkg-selections.txt apt-mark showmanual > ~/apt-manual.txt

第一行导出所有包的选中状态,第二行只导出你手动apt install过、不会被依赖清理掉的包。重装后执行sudo dpkg --set-selections < ~/dpkg-selections.txt再配合sudo apt dselect-upgrade就能还原大部分环境。

如果 Windows 覆盖了引导,修复工具是 boot-repair。用 Ubuntu live USB 启动后打开终端,添加 boot-repair 的 PPA 并运行,几分钟内重写 GRUB。这是双系统时代最常见的翻车点,修复手段别等到用的时候才去查。

2.3 第一轮系统配置:apt 源、更新与输入法框架

系统装完第一件事是换源。Ubuntu 24.04 是一个明显的分水岭:之前版本改/etc/apt/sources.list,24.04 起改成 deb822 格式,源文件挪到了/etc/apt/sources.list.d/ubuntu.sources。我见过不少人在 24.04 上还按老教程改 sources.list,结果apt update没有任何变化,问题就出在文件路径上。

换源前先备份,再替换主机名:

# Ubuntu 24.04:备份后把官方源替换为国内镜像 sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak sudo sed -i 's|//archive.ubuntu.com|//mirrors.aliyun.com|g' /etc/apt/sources.list.d/ubuntu.sources sudo apt update

sed 里用|做分隔符是为了避免和 URL 里的/冲突,-i直接改文件。备份文件留着,之后想回官方源一条 cp 就还原,不用凭记忆手敲。

如果是在 20.04 或 22.04,把末尾路径换成/etc/apt/sources.list即可,sed 命令不变。接着装基础组件:

# 把编译、文本处理和基础网络工具一次装齐 sudo apt install -y build-essential vim curl wget git htop net-tools

build-essential 是编译环境的元包,后面跑任何 C/C++ 项目都离不开。vim 和 htop 属于个人习惯,按需取舍。最后设置时区和中文语言包:

# 统一时区与中文语言环境,避免日志和文件名时区错乱 sudo timedatectl set-timezone Asia/Shanghai sudo apt install -y language-pack-zh-hans sudo update-locale LANG=zh_CN.UTF-8

timedatectl 由 systemd 统一管理时区,改这个文件比改/etc/timezone更可靠。language-pack-zh-hans 提供中文本地化数据,和输入法是两码事——输入法框架下一章专门讲。

3. 中文输入法与日常软件:Ubuntu 桌面“能装不能用”的破解

装完系统后的第一个真实体验是:中文打不出汉字、微信装不上、字体显示成方块。这些问题统称“能装不能用”。Ubuntu 对中文输入法一直摇摆,默认输入法框架从 IBus 到 fcitx5 之间的切换经常让新手卡壳。我的建议是统一改用 fcitx5,一套框架管所有中文输入法。

3.1 中文输入法设置:fcitx5 与搜狗输入法

中文输入法设置的高频需求集中在两点:打不出中文,以及候选框不跟随光标。fcitx5 对这两个问题的处理比 IBus 成熟。先装框架和拼音引擎:

# 安装 fcitx5 主体、中文输入组件和 GUI 配置工具 sudo apt install -y fcitx5 fcitx5-chinese-addons fcitx5-configtool im-config -n fcitx5

fcitx5-chinese-addons包含拼音、双拼和五笔引擎,configtool提供图形配置。im-config -n fcitx5把系统默认输入法框架切换成 fcitx5,改完要注销重新登录才会生效。

排查输入法状态可以用 fcitx5 自带的诊断工具:

fcitx5-diagnose | head -30

输出里如果提示找不到 fcitx5 进程,说明环境变量没生效;提示 DBus 连接失败,一般是刚装完还没重启。常见做法是先重启一次再跑诊断,避免把启动中的临时状态当成故障。

搜狗输入法的安装路径是 deb 包,但依赖 fcitx4 的库。直接 dpkg 会报依赖缺失:

sudo dpkg -i sogoupinyin_*.deb sudo apt -f install -y

dpkg -i只装包不解决依赖,报错是正常的;apt -f install -y会补装所有缺失依赖。装完在 fcitx5 配置工具里把 Sogou Pinyin 添加到输入法列表,重启会话后生效。

这里有个常见的坑:有人装了搜狗后又装回 IBus,两个输入法框架同时挂在登录会话里,表现为按键被吞、候选框闪烁。用im-config -n fcitx5统一指定,不要在桌面设置里反复切换。

3.2 日常软件与 HTML 编辑器:微信、WPS 与编辑器选择

Ubuntu 上的微信有两类装法:官方 Linux 版和 deepin-wine 兼容层打包。官方版这几年更新频率上来了,但功能仍然比 Windows 版少。deepin-wine 打包版保持 Windows 版功能,代价是偶尔字体渲染发虚。两者都是 deb 包,安装命令一样:

# 以社区打包的 deepin-wine 微信为例,装完用 apt 补齐依赖 sudo dpkg -i wechat_*.deb sudo apt -f install -y

HTML 编辑器方面,轻量场景我用 Gedit,写前端或脚本我用 VS Code。VS Code 在 Ubuntu 上走 snap 是最省事的路径:

sudo snap install code --classic code --version

snap 包自带沙箱,--classic取消隔离让它能访问 /home 下的工具链和终端。日常开发可以接受,但对权限敏感的人建议去官网下 deb 版,dpkg 安装后由 apt 统一管理升级。

办公套件和 PDF 阅读器一般不单独讲,Ubuntu 自带的 LibreOffice 应付日常文档够用。真正值得提前装的是字体包,否则 WPS 和微信里到处是方块:

sudo apt install -y fonts-noto-cjk fc-cache -fv

Noto CJK 是 Google 和 Adobe 联合出品的中文字体,fc-cache -fv强制重建字体缓存。这一步解决了“文件名正常但软件里全是方块”的显示问题,和 locale 无关。

3.3 网络与 USB 缓冲:两个想不到的桌面坑

桌面版 Ubuntu 的网络管理由 NetworkManager 负责,24.04 里系统级配置走 netplan,但日常改 IP 用 nmcli 更直接:

# 查看已识别的连接,再按连接名修改静态 IP nmcli con show nmcli con mod "Wired connection 1" ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 nmcli con up "Wired connection 1"

nmcli con mod针对连接配置修改,ipv4.method manual从 DHCP 切到静态地址,con up让配置立即生效。改完可以用ip addr验证。如果网卡名从 eth0 变成了 enp0s3,不用慌,新版 systemd 的命名规则就是这样。

USB 设备报错是另一个被忽视的桌面坑。接 USB3.0 摄像头或数据采集卡时,dmesg 里出现usbfs buffer overflow,直接采集不到数据。这是 usbcore 模块对 usbfs 内存限制太小导致的:

# 查看当前限制,单位 MB cat /sys/module/usbcore/parameters/usbfs_memory_mb # 临时调高到 1000 MB echo 1000 | sudo tee /sys/module/usbcore/parameters/usbfs_memory_mb

要永久生效,写模块配置文件:

# /etc/modprobe.d/usbcore.conf options usbcore usbfs_memory_mb=1000

重启后这个参数会自动加载。这属于低频但一踩就死的情况,做批量采集方向的读者建议提前写进自己的安装文档。

4. 开发环境与命令行:Ubuntu 下 gcc、环境变量、SSH 的排错基准

把日常桌面收拾利索之后,Ubuntu 真正的主场是命令行和开发环境。这一章的四个问题是出现频率最高的:gcc 装不上、PATH 写坏、SSH 连不上、shell 效率上不去。每一条都有固定排查路径,照着顺序走不会被卡住。

4.1 gcc 安装失败与解决:build-essential 的正确打开方式

“Ubuntu 安装 gcc 失败”这个搜索词背后,绝大多数情况不是 gcc 本身的问题,而是只装了 gcc 没装配套工具。gcc 单独包只包含编译器前端,没有 make、没有 g++、没有 dpkg-dev,后续编译项目照样报一堆缺头文件的错。正解是装元包:

# 一次性装齐 gcc/g++/make/dpkg-dev sudo apt update && sudo apt install -y build-essential gdb make gcc --version

build-essential 是元包,依赖 gcc、g++、make、dpkg-dev 和 libc6-dev。装完gcc --version确认版本。如果这样还失败,按顺序排查:

# 清缓存、更新索引,再看 gcc 的候选版本和来源 sudo apt clean sudo apt update apt-cache policy gcc

apt-cache policy是排错利器:Candidate 栏如果显示(none),说明软件源里没有这个包,多半是换源换坏了;如果显示版本号但安装的版本落后,说明系统里有残留的低版本 gcc,再执行一次sudo apt install gcc做版本提升。

另一个隐蔽原因是磁盘空间满了。apt update能跑完但install时报空间不足。先df -h /看一眼根分区剩余空间,少于 2GB 就先清理/var/cache/apt/archives里的旧包,别硬着头皮继续装。

4.2 环境变量配置错误:PATH 写坏之后的恢复方法

环境变量配置错误是 Ubuntu 新手和进阶用户都会遇到的事。最常见的症状是:打开终端连ls都提示命令找不到,或者sudo直接报错。原因基本只有一个——export PATH=...把默认 PATH 覆盖了。

恢复顺序先临时后持久。临时恢复是给当前会话一条安全 PATH:

# 先让 bash 恢复基本命令,再排查配置文件 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ls

一套标准 PATH 包含/usr/bin和/bin,恢复之后常用命令都能回来。接下来找出写坏的那行:

grep -n 'export PATH' ~/.bashrc /etc/profile /etc/environment 2>/dev/null

grep 输出里带行号,一眼定位是哪个文件哪一行。多数情况是~/.bashrc里写了export PATH=/custom/dir这种覆盖式写法,少了后面的:$PATH。

修复用 sed 或文本编辑器都行:

# 把覆盖式写法改成追加式写法,保留原有 PATH sed -i 's|export PATH=.*|export PATH="$PATH:$HOME/bin"|' ~/.bashrc source ~/.bashrc

sed -i直接改文件,由于原路径里可能有特殊字符,用|当分隔符最保险。改完source让当前会话生效。如果sudo也挂了,用绝对路径/usr/bin/sudo,这条命令不需要 sudo 在 PATH 里。

更严重的坑是/etc/environment写错,图形界面直接登录不进去。解决办法是用 TTY 登录:Ctrl+Alt+F3 切到纯命令行,编辑/etc/environment把错误行删掉,再 Ctrl+Alt+F1 回到图形登录。

4.3 SSH 无法连接:从服务端到防火墙的排查顺序

SSH 连不上是个经典黑匣子问题:客户端看不到任何明确原因。我的排查顺序固定是:服务端有没有装 → 服务有没有启动 → 端口有没有监听 → 防火墙有没有放行 → 密钥权限对不对。每一步都有对应命令。

# 安装并启动 ssh 服务,确认监听状态 sudo apt install -y openssh-server sudo systemctl enable --now ssh ss -tlnp | grep ':22'

systemctl enable --now ssh同时完成开机自启和当前启动。ss -tlnp输出解析:-t只看 TCP,-l只看监听端口,-n不做反向解析,-p显示进程名。如果输出里只有127.0.0.1:22,说明 SSH 只监听本地,外部永远连不上,需要去/etc/ssh/sshd_config把ListenAddress改成0.0.0.0。

防火墙是下一个高频坑:

sudo ufw allow OpenSSH sudo ufw status

ufw allow OpenSSH走的是 app 配置,等价于放行 22/tcp。ufw status如果不显示Status: active,防火墙实际没在拦截,问题在别处。

密钥登录排错是另一类问题。一个常见现象是“客户端无提示直接退”,/var/log/auth.log里写Authentication refused: bad ownership or modes,这是权限太宽松:

# SSH 对私钥和 authorized_keys 的权限要求很严格 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

排查 SSH 的最后一个手段是客户端跑ssh -vvv user@host,三段详细日志会明确告诉你是被拒、超时还是密钥不匹配。日志比猜测可靠,这个习惯比记命令重要得多。

4.4 Shell 效率:alias、history 与 CLI 习惯

命令行用得越久,alias 和 history 的收益越大。第一件事是把常用长命令简化:

# ~/.bashrc 追加常用别名和更大的历史记录 alias up='sudo apt update && sudo apt upgrade -y' alias gs='git status' alias open='xdg-open' export HISTSIZE=10000 HISTFILESIZE=20000

alias 里的up把两条 apt 命令合成一条,gs省去 git 的一长串,open让你从命令行打开文件管理器。HISTSIZE 控制当前会话内存保留条数,HISTFILESIZE 控制写入~/.bash_history的条数,两个都设大不会有什么副作用。

历史命令的使用频率分析是一招很实用的自查:

# 统计最高频命令,找出自己的重复劳动 history | awk '{print $2}' | sort | uniq -c | sort -nr | head -20

管道拆开看:history输出带编号的历史记录,awk '{print $2}'取第二个字段即命令名,sort排序,uniq -c统计相同命令出现的次数,sort -nr按次数倒序,head -20取前二十。跑完之后如果发现cd和ls占了前两名,说明很多时间花在手动跳目录上,就可以考虑给常用目录设置书签。输出频率最高的命令能客观暴露工作流里的低效点,比凭感觉优化可靠。

5. Ubuntu 常见问题排查与避坑清单:显卡驱动、CPU 虚拟化、源与字体

这一章专门收录系统跑起来之后的高频故障。每一条都按“现象 → 原因 → 解决”展开,命令可以直接抄,但执行前先理解前三行,避免在没确认原因时乱操作。

5.1 显卡驱动卸载不掉:现象、原因与三板斧

现象:nvidia-smi不显示,或提示command not found;dpkg -l | grep nvidia有一大片包;执行sudo apt remove nvidia-*报依赖冲突,系统提示要先移除几十个反向依赖。

原因:NVIDIA 驱动通过 DKMS 注册到内核模块,普通remove只删用户态文件,内核模块和 dkms 记录还在,导致重装和卸载都卡在半路。

解决分三步走:

# 先看当前 dkms 状态和所有 nvidia 相关包 dkms status dpkg -l | grep -E 'nvidia|libnvidia'

确认模块名后,一次性 purge 干净:

sudo apt purge nvidia-* libnvidia-* sudo apt autoremove sudo reboot

purge删包的同时删配置文件,autoremove清掉不再被需要的依赖。重启后用lsmod | grep nvidia确认没有 nvidia 内核模块残留。如果计划彻底不用 NVIDIA 驱动,顺手把开源驱动 nouveau 加入黑名单,写进/etc/modprobe.d/blacklist-nouveau.conf,再更新 initramfs,这能避免两个驱动打架导致的随机花屏。

5.2 VMware 报“客户机操作系统已禁用 CPU”:原因与 .vmx 参数

现象:VMware Workstation 启动虚拟机弹窗提示“客户机操作系统已禁用 CPU。请关闭或重置虚拟机”,虚拟机直接卡死。

原因:物理机开启了 Windows 的 Hyper-V、VBS 或内核隔离,VMware 拿不到硬件虚拟化权;另一种情况是虚拟机的 CPU 设置里没勾选“虚拟化 Intel VT-x/EPT 或 AMD-V/RVI”,嵌套虚拟化被当成纯软件模拟,部分操作系统会拒绝运行。

解决:在 VMware 的虚拟机设置里勾选虚拟化引擎,对应 .vmx 文件会自动加上一行。手动加也有效:

# 编辑 .vmx,在 cpu 相关配置之后追加 vhv.enable = "TRUE"

如果 Hyper-V 占用了虚拟化层,需要关闭它再重启:

# 管理员 PowerShell 里执行,关闭 hypervisor 启动类型 bcdedit /set hypervisorlaunchtype off

关闭 Hyper-V 会影响 WSL2 和 Docker Desktop 的运行,取舍时注意。VMware 和 Hyper-V 共存本身就是玄学,不同版本表现不一样,最省事的方案是用 VMware 时关 Hyper-V,要用 WSL2 再开回来。

5.3 换源后 apt update 报错:源失效的后悔药

现象:apt update报Release file not valid、404 Not Found或Hash Sum mismatch,更新到一半中断。

原因:镜像同步滞后,或发行版版本不对口。24.04 换源时把版本名写错,镜像服务器上根本不存在这套路径,就会 404。

解决:先恢复备份还原官方源,再重新走换源流程:

# 恢复换源前的备份,官方源路径回到默认 sudo cp /etc/apt/sources.list.d/ubuntu.sources.bak /etc/apt/sources.list.d/ubuntu.sources sudo apt update

如果备份不存在,手写一份 24.04 的官方源模板写入ubuntu.sources:

Types: deb URIs: http://archive.ubuntu.com/ubuntu/ Suites: noble noble-updates noble-backports Components: main universe restricted multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

关键参数是Suites里的版本代号:24.04 是 noble,更早的对应版本是 jammy(22.04)、focal(20.04)。版本代号写错,症状和镜像 404 一样。恢复官方源后如果还报签名问题,装一遍ca-certificates再更新 apt 索引,通常是证书链过期。

5.4 中文乱码与字体缺失:环境变量之外的显示层坑

现象:终端和文件管理器里中文正常,但浏览器、WPS、PDF 里显示方块;或者全文乱码,重设 LANG 环境变量无效。

原因:系统缺少中文字体。Linux 下的中文显示是两层逻辑:locale 负责字符编码,字体负责字形渲染。编码没问题但字形不存在,照样是乱码。

解决:安装一款完整中文字体并刷新字体缓存:

sudo apt install -y fonts-noto-cjk fc-cache -fv

fonts-noto-cjk 涵盖简体、繁体、日文、韩文字形,一套解决大部分方块问题。fc-cache -fv强制把新字体写入字体缓存,-f强制重建,-v输出过程方便确认。装完直接重开应用就能看到效果。

如果只装了 noto-cjk 还不够,考虑装fonts-wqy-zenhei文泉驿正黑,一些老软件对 Noto 的兼容性不如文泉驿。低配机器建议先只装文泉驿,体积更小,效果也够用。

5.5 dpkg 中断与“操作被锁定”:一条命令恢复现场

现象:安装包过程中断电或强制关机,重启后apt install任何包都报E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a'。

原因:dpkg 的数据库状态停留在半完成状态,APT 检测到前一个事务没结束,拒绝执行新事务。

解决:执行提示里的命令,然后让 apt 补全剩余依赖:

sudo dpkg --configure -a sudo apt update sudo apt -f install -y

dpkg --configure -a会把所有处于“已解包未配置”状态的包重新配置一遍,这是断电后的标准恢复流程。apt -f install -y补装依赖并修复依赖关系,一般跑完这两条系统就回到可用状态。

如果报的是锁错误,比如Could not get lock /var/lib/dpkg/lock-frontend,先确认没有其他 apt 进程,再移除锁:

ps aux | grep -E 'apt|dpkg' | grep -v grep sudo rm /var/lib/dpkg/lock-frontend

最后这条只在自己确认没有apt或dpkg进程在跑时执行。误删锁文件不会造成数据损坏,但可能让两个进程同时操作 dpkg 数据库,属于破釜沉舟手段,能不用就不用。

6. 项目实战:在 Ubuntu 上编译 Sophus 验证整条工具链

6.1 最小依赖与编译命令

前端开发可以直接用包管理器,C++ 项目最好从源码编译一次。以 SLAM 里常见的 Sophus 库为例,把前面零散的工具链串成一条完整的构建链路。Sophus 提供 SE3、SO3 这类李代数运算,是个典型的需要 CMake、Eigen3、fmt 依赖的小型项目。

先装依赖:

# Eigen3 是头文件库,fmt 提供字符串格式化,两者都是 Sophus 官方依赖 sudo apt install -y build-essential cmake libeigen3-dev libfmt-dev

Eigen3 不需要编译,头文件装好就能用;fmt 是 C++20 的格式化库实现,Sophus 用它输出矩阵。接着克隆并构建:

git clone https://github.com/strasdat/Sophus.git cd Sophus cmake -B build -DCMAKE_BUILD_TYPE=Release cmake --build build -j$(nproc)

cmake -B build把构建目录指定为 build,-DCMAKE_BUILD_TYPE=Release启用优化,-j$(nproc)自动使用全部 CPU 核心并行编译。第一次拉源码后如果cmake报找不到 fmt,优先跑sudo apt install -y libfmt-dev,不要急着手动编译 fmt。

6.2 写一个验证程序

#include <Sophus/se3.hpp> #include <iostream> int main() { // 构造绕 X 轴旋转 0.2 弧度的 SE3 变换,并输出旋转矩阵和平移向量 Sophus::SE3d T = Sophus::SE3d::rotX(0.2); std::cout << "SO3 matrix:\n" << T.so3().matrix() << std::endl; std::cout << "translation:\n" << T.translation() << std::endl; return 0; }

编译运行:

g++ -std=c++17 test_sophus.cpp -I/usr/include/eigen3 -lSophus -lfmt -o test_sophus ./test_sophus

-I/usr/include/eigen3是因为 Ubuntu 的 Eigen3 头文件默认在单独目录下,-lSophus -lfmt链接 Sophus 和 fmt 的动态库。如果链接时报找不到-lSophus,先回到 Sophus/build 目录执行sudo cmake --install build,动态库默认装到/usr/local/lib,需要时补-L/usr/local/lib指向它。

我第一次在 Ubuntu 上编 Sophus,被 libfmt-dev 版本不匹配卡了半个小时,后来发现是发行版给 fmt 打了补丁,和源码里的期望版本对不上。从那以后形成习惯:在 Ubuntu 上碰 C++ 项目,先查apt-cache policy看库版本,再决定直接用发行版包还是源码编译依赖。这个习惯帮我避开过不少翻车现场,希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询