所以我在网上冲浪,偶然发现了这篇文章。它基本上表明FreeBSD从版本 10 及更高版本开始将弃用GCC以支持Clang/LLVM。
从我目前在网上看到的情况来看,Clang/LLVM是一个相当雄心勃勃的项目,但在可靠性方面它无法与GCC 相提并论。
FreeBSD 选择 LLVM 作为他们的编译器基础设施是否有任何技术原因,或者整个问题归结为永恒的 GNU/GPL 与 BSD 许可证?
我了解如何在链接/编译时定义包含共享对象。但是,我仍然想知道可执行文件*.so在执行时如何查找共享对象(库)。
例如,我的应用程序a.out调用lib.so库中定义的函数。编译后,我移动lib.so到我的$HOME.
我怎么知道a.out去那里找呢?
Fedora 相当于 Debian build-essential 软件包是什么?
我需要在我的 Fedora 机器上编译一些软件。把它放在哪里以免干扰打包软件的最佳位置?
compiling fhs software-installation directory-structure package-management
自己编译 Linux 内核有什么好处?您可以通过将其定制为您的硬件来提高效率吗?
我想在没有 root 访问权限的机器上安装 tmux。我已经编译了 libevent 并安装了它$HOME/.bin-libevent,现在我想编译 tmux,但 configure 总是以 结尾configure: error: "libevent not found",即使我试图Makefile.am通过修改LDFLAGS和指向 libevent 目录CPPFLAGS,但似乎没有任何效果。
如何告诉系统在我的主目录中查找 libevent?
我正在尝试在我的 Arch Linux 发行版上重新安装 pacman。当我运行配置脚本“configure.ac”时,我得到一堆未定义的宏:
error: possibly undefined macro: AM_INIT_AUTOMAKE.
If this token and others are legitimate, please use m4_pattern_allow.
See the autoconf documentation.
error: possibly undefined macro: AC_PROG_LIBTOOL
error: possibly undefined macro: AM_GNU_GETTEXT
error: possibly undefined macro: AM_GNU_GETTEXT_VERSION
error: possibly undefined macro: AM_CONDITIONAL
Run Code Online (Sandbox Code Playgroud)
有谁知道什么会导致这些宏未定义?来自 Ubuntu(一切正常,因此很无聊),我真的不了解 automake。
一个非常简单的小程序的可执行文件,比如下面显示的,在一种 Linux 上编译的,它会在不同的 Linux 上运行吗?还是需要重新编译?
在这种情况下,机器架构重要吗?
int main()
{
return (99);
}
Run Code Online (Sandbox Code Playgroud) 假设我在美国/英国以外的一家大型服务机构工作。我们广泛使用 UNIX 和 Linux 服务器。
通读这篇文章,它提到将后门插入 C 编译器很容易,然后用该编译器编译的任何代码也将包含后门。现在鉴于最近有关 NSA/GCHQ 授权在所有加密方法、硬件和软件中放置后门/弱点的泄密事件,编译器现在是一个关键的故障点。可能所有标准的 UNIX/Linix 发行版都可能受到损害。我们不能让流氓政府损害我们的系统、数据和客户数据。
鉴于这些信息,我想从头开始构建一个受信任的编译器,然后我有一个安全的基础来构建,这样我就可以使用该编译器从源代码构建操作系统和应用程序。
从源代码编译编译器(一个看似鸡生蛋的场景)然后从头开始编译受信任的 Unix/Linux 发行版的正确(和安全方法)是什么?
您可以假设我或其他人有能力阅读和理解安全漏洞的源代码,因此在编译之前将首先审查源代码。我真正想要的是一份从头开始安全地生成这个编译器的工作指南,可用于编译内核、操作系统的其他部分和应用程序。
如果我们要对在该堆栈上运行的操作系统或应用程序有任何信心,安全堆栈必须从基础级别开始。是的,我知道可能存在硬件后门,它们可能会在编译器构建时将一些微代码插入到编译器中。除了可能使用不是在美国设计的芯片之外,我们目前对此无能为力。让我们先对这一层进行排序,并假设我可以在插入任何后门之前在旧计算机上构建它。
正如布鲁斯·施奈尔 (Bruce Schneier) 所说:“我对工程师们说:我们建立了互联网,我们中的一些人帮助颠覆了它。现在,我们这些热爱自由的人必须修复它。”
额外链接:
我想知道:在安装某些东西时,有一种双击安装可执行文件的简单方法,另一方面,有一种从源代码构建它的方法。
后一个,下载一个源包,真的很麻烦。
但是这两种方法之间的根本区别是什么?