ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Ubuntu从入门到实战:装机、双系统、apt配置与开发环境排错

Ubuntu从入门到实战:装机、双系统、apt配置与开发环境排错 简介面向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开机直接进 WindowsUbuntu 得靠修复引导才能回来。分区我一般这样分EFI 分区 512 MBswap 和内存大小差不多根分区至少 40 GB/home 可以不单独分重装系统时数据还在但备份习惯不能省。分区下手之前先看磁盘现状# 列出磁盘和文件系统双系统分区前必须确认目标磁盘 lsblk -f sudo fdisk -l /dev/nvme0n1lsblk -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.list24.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 updatesed 里用|做分隔符是为了避免和 URL 里的/冲突-i直接改文件。备份文件留着之后想回官方源一条 cp 就还原不用凭记忆手敲。如果是在 20.04 或 22.04把末尾路径换成/etc/apt/sources.list即可sed 命令不变。接着装基础组件# 把编译、文本处理和基础网络工具一次装齐 sudo apt install -y build-essential vim curl wget git htop net-toolsbuild-essential 是编译环境的元包后面跑任何 C/C 项目都离不开。vim 和 htop 属于个人习惯按需取舍。最后设置时区和中文语言包# 统一时区与中文语言环境避免日志和文件名时区错乱 sudo timedatectl set-timezone Asia/Shanghai sudo apt install -y language-pack-zh-hans sudo update-locale LANGzh_CN.UTF-8timedatectl 由 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 fcitx5fcitx5-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 -ydpkg -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 -yHTML 编辑器方面轻量场景我用 Gedit写前端或脚本我用 VS Code。VS Code 在 Ubuntu 上走 snap 是最省事的路径sudo snap install code --classic code --versionsnap 包自带沙箱--classic取消隔离让它能访问 /home 下的工具链和终端。日常开发可以接受但对权限敏感的人建议去官网下 deb 版dpkg 安装后由 apt 统一管理升级。办公套件和 PDF 阅读器一般不单独讲Ubuntu 自带的 LibreOffice 应付日常文档够用。真正值得提前装的是字体包否则 WPS 和微信里到处是方块sudo apt install -y fonts-noto-cjk fc-cache -fvNoto 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 1nmcli 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_mb1000重启后这个参数会自动加载。这属于低频但一踩就死的情况做批量采集方向的读者建议提前写进自己的安装文档。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 --versionbuild-essential 是元包依赖 gcc、g、make、dpkg-dev 和 libc6-dev。装完gcc --version确认版本。如果这样还失败按顺序排查# 清缓存、更新索引再看 gcc 的候选版本和来源 sudo apt clean sudo apt update apt-cache policy gccapt-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/nullgrep 输出里带行号一眼定位是哪个文件哪一行。多数情况是~/.bashrc里写了export PATH/custom/dir这种覆盖式写法少了后面的:$PATH。修复用 sed 或文本编辑器都行# 把覆盖式写法改成追加式写法保留原有 PATH sed -i s|export PATH.*|export PATH$PATH:$HOME/bin| ~/.bashrc source ~/.bashrcsed -i直接改文件由于原路径里可能有特殊字符用|当分隔符最保险。改完source让当前会话生效。如果sudo也挂了用绝对路径/usr/bin/sudo这条命令不需要 sudo 在 PATH 里。更严重的坑是/etc/environment写错图形界面直接登录不进去。解决办法是用 TTY 登录CtrlAltF3 切到纯命令行编辑/etc/environment把错误行删掉再 CtrlAltF1 回到图形登录。4.3 SSH 无法连接从服务端到防火墙的排查顺序SSH 连不上是个经典黑匣子问题客户端看不到任何明确原因。我的排查顺序固定是服务端有没有装 → 服务有没有启动 → 端口有没有监听 → 防火墙有没有放行 → 密钥权限对不对。每一步都有对应命令。# 安装并启动 ssh 服务确认监听状态 sudo apt install -y openssh-server sudo systemctl enable --now ssh ss -tlnp | grep :22systemctl 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 statusufw 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 userhost三段详细日志会明确告诉你是被拒、超时还是密钥不匹配。日志比猜测可靠这个习惯比记命令重要得多。4.4 Shell 效率alias、history 与 CLI 习惯命令行用得越久alias 和 history 的收益越大。第一件事是把常用长命令简化# ~/.bashrc 追加常用别名和更大的历史记录 alias upsudo apt update sudo apt upgrade -y alias gsgit status alias openxdg-open export HISTSIZE10000 HISTFILESIZE20000alias 里的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 founddpkg -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 rebootpurge删包的同时删配置文件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.sourcesTypes: 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更早的对应版本是 jammy22.04、focal20.04。版本代号写错症状和镜像 404 一样。恢复官方源后如果还报签名问题装一遍ca-certificates再更新 apt 索引通常是证书链过期。5.4 中文乱码与字体缺失环境变量之外的显示层坑现象终端和文件管理器里中文正常但浏览器、WPS、PDF 里显示方块或者全文乱码重设 LANG 环境变量无效。原因系统缺少中文字体。Linux 下的中文显示是两层逻辑locale 负责字符编码字体负责字形渲染。编码没问题但字形不存在照样是乱码。解决安装一款完整中文字体并刷新字体缓存sudo apt install -y fonts-noto-cjk fc-cache -fvfonts-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 -ydpkg --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-devEigen3 不需要编译头文件装好就能用fmt 是 C20 的格式化库实现Sophus 用它输出矩阵。接着克隆并构建git clone https://github.com/strasdat/Sophus.git cd Sophus cmake -B build -DCMAKE_BUILD_TYPERelease cmake --build build -j$(nproc)cmake -B build把构建目录指定为 build-DCMAKE_BUILD_TYPERelease启用优化-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 -stdc17 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看库版本再决定直接用发行版包还是源码编译依赖。这个习惯帮我避开过不少翻车现场希望帮到你。本文还有配套的精品资源点击获取
返回列表