我正在构建一个系统,主要用于教育目的,不仅用于构建过程本身,还用于开发/调试。
这就是我想要实现的目标。
安装完全独立于系统工具链的工具链。
1.1. GCC(C、C++)是必须的。我希望将编译器与操作系统隔离(例如,在我认为必要时进行升级),并且还可以使用调试符号和源代码来构建 libstdc++ 调试/发布。 “隔离”还意味着我希望 GCC 不包含通常的硬编码路径。当前系统GCC是5.1.1,我会构建5.2.0。
1.2.出于与上述相同的两个原因,libc/glibc 将是一个很好的选择。可取吗?我可能会使用与系统上安装的版本相同的版本。
1.3.制作/binutils。是否需要/建议?我可能会使用与系统上安装的版本相同的版本。
从源代码构建一些我更经常使用的库/工具,例如:
2.1.兹库
2.2.重症监护室
2.3.开放式SSL
2.4.促进
2.5. Qt
ETC。
我再次从源代码构建这些,因为我喜欢构建每个版本的调试/发布版本,与其他从源构建的依赖项(例如,Boost -> ICU)的调试/发布版本链接,并带有所有调试符号和源代码。还因为我喜欢尝试不同的配置选项。
对于其他库/工具,请使用系统存储库中的包。
3.1.这包括对上述库的要求 - 例如,libxbc、libgstreamer 或用于 Qt 的 dbus。
尽管我确实拥有 root 访问权限(这是 VirtualBox 上的 Fedora VM),但我宁愿不使用它。
我看过Linux 从头开始而且,虽然对于我打算做的事情有很多有用的信息,但我相信,有一个根本的区别,因为我不想要与“主机”系统完全分离的东西。我希望我的工具/库始终在系统之前搜索我的安装路径,但否则可以访问从存储库安装的所有其他内容。我也不想删除任何系统工具(例如,GCC/binutils)和库(我相信系统应该使用自己的 libc 或 OpenSSL,而不是我的)。如果系统需要构建某些东西,它不应该找到我的工具/库。
我的问题。
5.1.如上面 1.3 中所述,我应该使用系统的 make/binutils,还是需要从源代码构建自己的?
5.2.鉴于我需要访问“主机”系统,chroot 环境是否可行/理想?
5.3.在开始这样做之前,我还应该研究什么吗?
我承认我有点超出了我的能力范围,但这就是我一直学习一切的方式,所以这不是问题。
非常欢迎任何相关文档的帮助/建议/指针。
编辑以解决 cas 的答案
我的目标不是前沿,而是对调试版本的控制。我--enable-libstdcxx-debug
在 Fedora 存储库上找不到 libstdc++ 的调试(非优化)版本(通过使用 配置 GCC 获得)。如果我把它放在一个包中,我就不需要从源代码构建 GCC。
而且,尽管更多地了解构建过程及其与系统组件的交互是一个额外的好处,但我真正想要的是尝试 GDB、符号加载以及调试优化与非优化代码。这就是为什么我想要拥有未优化版本的库。
我同意这个麻烦。我之前的两次尝试,我遵循你提到的“正常”方式,导致构建 Qt(我期望从源代码构建的最复杂的软件)时出现异常错误;而且,当使用“系统工具链”构建时,一切都很顺利。这就是为什么我认为也许有一种更好的方法可以做到我想要的,更彻底,但不需要从源代码构建整个系统。
我可以转移到不同的发行版,只要我不必从源代码构建所有内容,并且我对软件版本没有要求,即我可以构建 GCC 5.1.1,这与我在 Fedora VM 上的版本相同,以尽量减少差异。我已经尽可能遵循 Fedora 软件包中的“构建配方”。
答案1
执行此操作的“正常”方法是修改用户的环境以使用编译版本 - 例如 PATH、LD_LIBRARY_PATH、C_INCLUDE_PATH、CPLUS_INCLUDE_PATH 等。
在您的登录脚本中设置这些变量和任何其他相关变量(例如~/.profile
forbash
或sh
)。
然后,例如,使用系统 gcc 编译 gcc 5.20 并将其安装在您的主目录下(例如 ~/bin 中的二进制文件、~/include 中的标头、~/lib 中的库等)。
对要编译的其他库/程序执行相同的操作。
但请注意,无法保证与系统库的兼容性 - 例如,如果您针对新版本的 Qt 编译应用程序,它可能无法在系统的 KDE/Qt 上正确运行(或根本无法运行)。
就我个人而言,我认为你只是在给自己找麻烦……与系统的偏差越大,你不可避免地会遇到的麻烦就越多,你最终得到的系统就越无法复制或理解得足够好。已调试。你最好只重新编译你绝对不能没有的东西,即使这样,如果你只是编译一个新的包并使用系统的包管理工具(在你的例子中是 rpm)安装到系统中,你的情况会更好)
如果您确实需要“前沿”版本的东西,那么请使用前沿的 alpha 预发行发行版,例如 Fedora Rawhide 或 Debian Sid。