如何获得静态C编译器?


8

我正在使用chroot环境,我想拥有一个可移植的C编译器,这样我就可以轻松地在每个环境中设置一些基本的构建工具,而不必在周围移动太多的库。

Gcc对于我想做的事情似乎很肿,但是如果构建静态gcc相当容易,那么我就不会介意几十兆字节。

我也在看Tiny C编译器,它虽然较小,但看起来仍然具有令人印象深刻的功能集。但是,在源目录中运行./configure --help不会列出静态构建tcc的任何选项,而且我不确定该如何完成。


为了回答您的次要问题,即内存使用情况,这里有一些解决方案:您可以创建只包含指向GCC硬链接的影子目录;您可以使用Docker容器(容器比chroot更安全,而docker提供了联合文件系统,可以节省内存)。
ctrl-alt-delor

Answers:


1

构建静态二进制文件应该与使用-static运行gcc一样简单,或者如果直接调用ld则使用-Bstatic。尝试

CFLAGS=-static make

跑步后configure。如果失败,结果将很明显,例如在链接时出现了许多未定义的引用。


1
make CFLAGS=-static刚刚尝试过。使make发出有关的警告dlopen,然后当我尝试在chroot环境中运行可执行文件时,/usr/lib/crt1.o .. crti,o .. crtn.o出现未找到错误。这是“链接时未定义的引用”的意思吗?
math4tots 2012年

我预期的错误是由于缺少静态版本的库(如crt1.o)引起的,但是链接器会立即抱怨。如果您在运行时看到错误,则说明该二进制文件不是静态链接的。
凯尔·琼斯

我认为您误解了这个问题:math4tots想要一个C编译器作为独立的二进制文件(或至少作为一组易于识别的文件),而不是C编译器来生成独立的二进制文件。
吉尔(Gilles)'所以

1
是的,我知道。产生一个静态链接的编译器是必要的第一步,而这个问题似乎是在问这个问题。
凯尔·琼斯

1
@Gilles将C编译器作为独立二进制文件获取的最佳方法是使用已经拥有的编译器从源代码进行编译。
OrangeDog 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.