所以我在网上冲浪,偶然发现了这篇文章。它基本上表明FreeBSD从版本 10 及更高版本开始将弃用GCC以支持Clang/LLVM。
从我目前在网上看到的情况来看,Clang/LLVM是一个相当雄心勃勃的项目,但在可靠性方面它无法与GCC 相提并论。
FreeBSD 选择 LLVM 作为他们的编译器基础设施是否有任何技术原因,或者整个问题归结为永恒的 GNU/GPL 与 BSD 许可证?
假设我在美国/英国以外的一家大型服务机构工作。我们广泛使用 UNIX 和 Linux 服务器。
通读这篇文章,它提到将后门插入 C 编译器很容易,然后用该编译器编译的任何代码也将包含后门。现在鉴于最近有关 NSA/GCHQ 授权在所有加密方法、硬件和软件中放置后门/弱点的泄密事件,编译器现在是一个关键的故障点。可能所有标准的 UNIX/Linix 发行版都可能受到损害。我们不能让流氓政府损害我们的系统、数据和客户数据。
鉴于这些信息,我想从头开始构建一个受信任的编译器,然后我有一个安全的基础来构建,这样我就可以使用该编译器从源代码构建操作系统和应用程序。
从源代码编译编译器(一个看似鸡生蛋的场景)然后从头开始编译受信任的 Unix/Linux 发行版的正确(和安全方法)是什么?
您可以假设我或其他人有能力阅读和理解安全漏洞的源代码,因此在编译之前将首先审查源代码。我真正想要的是一份从头开始安全地生成这个编译器的工作指南,可用于编译内核、操作系统的其他部分和应用程序。
如果我们要对在该堆栈上运行的操作系统或应用程序有任何信心,安全堆栈必须从基础级别开始。是的,我知道可能存在硬件后门,它们可能会在编译器构建时将一些微代码插入到编译器中。除了可能使用不是在美国设计的芯片之外,我们目前对此无能为力。让我们先对这一层进行排序,并假设我可以在插入任何后门之前在旧计算机上构建它。
正如布鲁斯·施奈尔 (Bruce Schneier) 所说:“我对工程师们说:我们建立了互联网,我们中的一些人帮助颠覆了它。现在,我们这些热爱自由的人必须修复它。”
额外链接:
我正在尝试将 apache 2.2.15 升级到 2.2.27。在运行从 apache2.2.15/build 获取的 config.nice 时,我收到以下错误:
checking whether the C compiler works... no
configure: error: in `/home/vkuser/httpd-2.2.27/srclib/apr':
configure: error: C compiler cannot create executables
Run Code Online (Sandbox Code Playgroud)
我试图在网上搜索但没有运气。我还通过运行一个小的 test.c 脚本测试了 c 编译器,它运行良好。在线提供的解决方案很少,例如安装“kernel-devel”软件包,但没有解决问题。我怎样才能让它发挥作用?
以下是生成的 config.log:
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by configure, which was
generated by GNU Autoconf 2.67. Invocation command line was
$ ./configure --prefix=/opt/myapp/apache2.2 --with-mpm=worker --enable-static-support --enable-ssl=static --enable-modules=most --disable-authndbd --disable-authn-dbm --disable-dbd --enable-static-logresolve …
Run Code Online (Sandbox Code Playgroud) 我使用的是“ Advanced Linux Programming (2001)” [code]一书中的 Makefile 。我很奇怪看到GNU make确实正确编译了代码,甚至没有在 Makefile 中指定编译器。这就像没有任何食谱烘焙!
这是代码的最小版本:
测试.c
int main(){}
Run Code Online (Sandbox Code Playgroud)
生成文件
all: test
Run Code Online (Sandbox Code Playgroud)
并真正起作用!这是它执行的命令:
cc test.c -o test
Run Code Online (Sandbox Code Playgroud)
我在文档中找不到任何有用的东西。这怎么可能?
PS 额外说明:连语言都没有指定;因为test.c
可用,GNUmake
使用cc
. 如果存在test.cpp
或test.cc
(当没有时test.c
),它使用g++
(而不是c++
)。
到目前为止,它已经运行了大约 4 个小时。需要注意的一件事是我没有先决条件,必须通过 contrib/download_prerequisites 下载它们。不确定它是否会增加编译时间。
机器规格如下:
4 CPUs Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz
uname -a
Linux <name> 3.10.0-693.17.1.el7.x86_64 #1 SMP Thu Jan 25 13:49:55 PST 2018 x86_64 x86_64 x86_64 GNU/Linux
free -m
total used free shared buff/cache available
Mem: 11854 676 1040 8 10137
10821
Swap: 5119 0 5119
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Linux 服务器上的主目录中安装 Ruby(没有 root 访问权限),这当然需要使用gcc
. 我能找到的最接近的是该名称的目录(如果你足够深入)包含cc1
:
>: find / -iname gcc 2> /dev/null
/usr/libexec/gcc
>: tree -if /usr/libexec/gcc
/usr/libexec/gcc
/usr/libexec/gcc/x86_64-redhat-linux
/usr/libexec/gcc/x86_64-redhat-linux/4.1.1
/usr/libexec/gcc/x86_64-redhat-linux/4.1.1/cc1
/usr/libexec/gcc/x86_64-redhat-linux/4.1.2 -> 4.1.1
Run Code Online (Sandbox Code Playgroud)
CC1 在维基百科上重定向到 GCC的事实似乎暗示着某种接近身份的东西,但是除了关于重定向的说明之外,GCC 页面上没有其他提及 CC1,而且谷歌搜索没有给我任何有用的东西,我尝试cc1
在gcc
失败的地方。
他们之间究竟是什么关系?它是否让我有希望在这台机器上编译 Ruby?
有没有人gold
以前使用过链接器?为了链接一个相当大的项目,我不得不使用它而不是 GNU ld
,后者抛出了一些错误并且无法链接。
gold
链接器如何能够链接ld
失败的大型项目?某处是否存在某种记忆欺骗?
我尝试了许多解决方案来在 debian 服务器上为我的 gcc 编译器安装更新。他们都没有工作。我需要编译器更新才能使用 c++11 的新功能,因为这提供了稳定的 libcxx11 ABI,以及对 C++11 的稳定支持(请参阅此处)。专门获取版本“GLIBCXX_3.4.21”,该版本未包含在我当前的编译器 gcc 版本 4.9.2(Debian 4.9.2-10)中。
一些解决方案的指针会有所帮助。提前致谢。
一些与我已经尝试过的问题相关的论坛链接:
据说用-O3
gcc 优化选项编译 GNU 工具和 Linux 内核会产生奇怪和时髦的错误。这是真的吗?有没有人尝试过,还是只是一个骗局?
根据这个答案,我执行了一系列先决条件设置以准备pip
安装python3
软件包。
然而,当我跑
python3 -m pip install psycopg2
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Downloading/unpacking psycopg2
Downloading psycopg2-2.6.2.tar.gz (376kB): 376kB downloaded
Running setup.py (path:/tmp/pip-build-1ocbvumt/psycopg2/setup.py) egg_info for package psycopg2
Installing collected packages: psycopg2
Running setup.py install for psycopg2
Skipping implicit fixer: buffer
Skipping implicit fixer: idioms
Skipping implicit fixer: set_literal
Skipping implicit fixer: ws_comma
building 'psycopg2._psycopg' extension
gcc -pthread -Wno-unused-result -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -I/opt/rh/rh-python34/root/usr/include -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong …
Run Code Online (Sandbox Code Playgroud)