[ Content contribution] Linux 进阶教程(一):从源代码编译软件的超详细指南
Tofloor
poster avatar
玄圭SwenGway
deepin
2025-01-13 12:37
Author

Linux 进阶教程(一):从源代码编译软件的超详细指南

本节教程将带你深入了解如何在 Linux 系统中从源代码编译安装软件。这是一种灵活的方式,让你能体验到软件定制化的乐趣,同时也更好地理解软件的底层工作原理。不过,编译并不是点点鼠标就能完成的,它需要一些耐心和知识。我们将从基础开始,涵盖常见错误的解决方法,尤其是找不到 ./configure 文件的情况。


一、为什么要从源代码编译?

你可能会问:“为什么要从源代码编译软件,直接用包管理器不好吗?”

优点

  1. 灵活性:可以定制功能,比如开启或关闭某些模块。
  2. 最新版本:有时包管理器的软件版本滞后,源码编译可获得最新功能。
  3. 适配性:针对特定硬件或操作系统进行优化。

缺点

  1. 学习成本:需要一定的 Linux 基础。
  2. 时间消耗:编译复杂项目可能需要较长时间。

二、源代码编译的五大步骤

1. 获取源代码

常见方法:

  • 官网下载:通常是 .tar.gz.tar.bz2 格式的压缩包。
    示例:
    wget https://example.com/software-1.0.tar.gz
    
  • 版本控制工具下载:如果项目托管在 GitHub 等平台,使用 git clone
    git clone https://github.com/example/software.git
    

2. 解压源码包

解压缩 .tar.gz 文件:

tar -xvzf software-1.0.tar.gz
cd software-1.0 
解压完成后到相应的文件夹,先看看有没有像REDDME文件或者是INSTALL这种文件打开看看有没有说明,这两个文件一般是开发者针对编译的注意事项或其他要求。大概率是英文的,英文不好去翻译。

3. 安装编译工具

大多数源代码都需要编译器和相关工具,推荐安装以下基础包:

sudo apt update
sudo apt install build-essential
sudo apt install gcc g++ make

4. 配置构建环境

在解压后的源码目录中,通常有一个 configure 脚本。运行它会检查你的系统环境是否满足软件编译需求,并生成编译所需的 Makefile

./configure --prefix=/usr/local

常见选项:

  • --prefix=/usr/local:指定软件安装目录。
  • --enable-feature--disable-feature:启用或禁用功能模块。

示例:

./configure --prefix=/usr/local --enable-ssl

5. 编译和安装

运行 make 编译:

make

然后用 sudo 安装:

sudo make install

三、常见问题和解决方法

1. 找不到 ./configure 文件

有时源码目录中没有 configure,可能原因如下:

  • 项目使用其他构建工具:如 cmakemeson
    • 如果有 CMakeLists.txt 文件,用 cmake
      cmake -DCMAKE_INSTALL_PREFIX=/usr/local .
      make
      sudo make install
      
    • 如果有 meson.build 文件,用 meson
      meson setup build
      ninja -C build
      sudo ninja -C build install
      
  • 需要生成 configure 文件:一些项目需要用 autogen.shautoreconf 来生成 configure
    示例:
    ./autogen.sh
    ./configure
    

2. 缺少依赖

报错示例:

configure: error: libssl is required

解决方法:查找并安装所需依赖:

sudo apt install libssl-dev

如果不知道依赖的名称,可以用 apt search

apt search ssl | grep dev

3. 权限不足

报错示例:

Permission denied

解决方法:

  1. 确保脚本有可执行权限:
    chmod +x configure
    
  2. 如果仍然报错,使用 sudo
    sudo ./configure
    

4. 编译器版本不兼容

报错示例:

error: GCC version 8.0 or later is required

解决方法:
安装所需版本的 GCC:

sudo apt install gcc-10 g++-10
sudo update-alternatives --config gcc

四、扩展工具

1. 自动化构建工具

  • CMake:跨平台构建工具,现代项目常用:
    cmake -DCMAKE_INSTALL_PREFIX=/usr/local .
    make
    sudo make install
    
  • Meson:快速、现代的构建工具:
    meson setup build
    meson compile -C build
    sudo meson install -C build
    

2. 编译时间优化

  • 多核编译:使用 -j 指定 CPU 核心数以加速编译:
    make -j$(nproc)
    
  • ccache:缓存已编译的文件,减少重复编译时间:
    sudo apt install ccache
    

五、实战演练:编译安装 htop

完整操作步骤如下:

  1. 下载源码:
    wget https://github.com/htop-dev/htop/archive/refs/tags/3.2.2.tar.gz
    tar -xvzf 3.2.2.tar.gz
    cd htop-3.2.2
    
  2. 配置环境:
    ./autogen.sh
    ./configure --prefix=/usr/local
    
  3. 编译并安装:
    make
    sudo make install
    
  4. 验证安装:
    htop --version
    

六、卸载源码安装的软件

如果安装了源码的原目录还在,可以直接运行:

sudo make uninstall

如果原目录已删除,手动删除安装路径中的相关文件,通常在 /usr/local/bin/usr/local/lib


七、总结

通过本节内容,你已经掌握了:

  1. 从获取源码到安装软件的完整流程。
  2. 如何应对 ./configure 缺失、依赖错误、权限问题等常见难题。
  3. 使用现代构建工具如 cmakemeson 处理特殊项目。
  4. 编译软件的实战技能,包括优化方法和卸载步骤。

编译软件虽然需要时间,但它能让你感受到 Linux 的灵活和自由,多练几次,你就能轻松驾驭!🎉

Reply Favorite View the author
All Replies
wlly-lzh
deepin
2025-01-13 12:41
#1

建议编译之前看看项目中有没有对应的说明文件,不要一上来就一把梭。

Reply View the author
玄圭SwenGway
deepin
2025-01-13 13:12
#2
wlly-lzh

建议编译之前看看项目中有没有对应的说明文件,不要一上来就一把梭。

好吧,疏忽了,先看看有没有像REDDME文件或者是INSTALL这种文件打开看看有没有说明,多谢提醒

Reply View the author
晚秋(lateautumn)
Moderator
2025-01-13 16:54
#3

学习了。另外龙芯版的操作系统,有的打印机没有适配驱动,可以用x86版的来编译吗?

Reply View the author
玄圭SwenGway
deepin
2025-01-13 17:13
#4
晚秋(lateautumn)

学习了。另外龙芯版的操作系统,有的打印机没有适配驱动,可以用x86版的来编译吗?

这个不清楚

Reply View the author
玄圭SwenGway
deepin
2025-01-13 18:25
#5
晚秋(lateautumn)

学习了。另外龙芯版的操作系统,有的打印机没有适配驱动,可以用x86版的来编译吗?

毕竟我还没有在龙芯编译过软件,也不知道底层逻辑有什么不同,就不瞎说了,你去找精通的大神问一下吧

Reply View the author
晚秋(lateautumn)
Moderator
2025-01-13 21:31
#6
玄圭SwenGway

毕竟我还没有在龙芯编译过软件,也不知道底层逻辑有什么不同,就不瞎说了,你去找精通的大神问一下吧

刚攒了台龙芯电脑,性价比可以了。估计用户增长会很快。楼主可以试着编译一下。applaud 对于我这个大白,实在是太难了。

Reply View the author
玄圭SwenGway
deepin
2025-01-13 22:04
#7
晚秋(lateautumn)

刚攒了台龙芯电脑,性价比可以了。估计用户增长会很快。楼主可以试着编译一下。applaud 对于我这个大白,实在是太难了。

你还没有发表你的使用体验心得呢,不足之处有哪些都说说吧,让大众知道

Reply View the author
晚秋(lateautumn)
Moderator
2025-01-14 10:00
#8
玄圭SwenGway

你还没有发表你的使用体验心得呢,不足之处有哪些都说说吧,让大众知道

一周一直在折腾,双系统还没折腾太明白。折腾明白了再写。applaud

Reply View the author
BrianDeepin
deepin
2025-01-22 13:50
#9

成功学会,感谢大大
图片.png

Reply View the author
玄圭SwenGway
deepin
2025-01-22 14:21
#10
BrianDeepin

成功学会,感谢大大
图片.png

恭喜了,不用谢我

Reply View the author
New Thread

Popular Events

More
国际排名
WHLUG