如何制作 coreutils 的静态二进制文件?

如何制作 coreutils 的静态二进制文件?

我正在尝试制作 rm 的静态二进制文件,因此我尝试使用以下方法编译 coreutils

configure; make SHARED=0 CC='gcc -static'; make install

但我总是遇到错误。

首先对 c99 或 gnu99 提出抱怨,我通过在 CC 值中添加 -std=gnu99 解决了这个问题:

make SHARED=0 CC='gcc -static -std=gnu99'

之后它说:

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbeginT.o: relocation R_X86_64_32 against `__TMC_END__' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.8/crtbeginT.o: error adding symbols: Bad value

我尝试添加 -fPIC 就像添加 -std 选项一样但无济于事。

是否有可能制作 coreutils 的静态二进制文件?(仅对 rm 感兴趣)如果可以,怎么做?(我没有任何构建 Linux 二进制文件的经验)

PS:我从ubuntu网站下载了coreutils源代码,值得信赖。(coreutils-8.21)

答案1

根据此评论关于错误 #640734,您可以尝试一种解决方法:

$ cd /usr/lib/gcc/x86_64-linux-gnu/4.8
$ sudo cp crtbeginT.o crtbeginT.orig.o
$ sudo cp crtbeginS.o crtbeginT.o

另外,-fPIC在上面的命令中添加:

make SHARED=0 CFLAGS='-static -std=gnu99 -static-libgcc -static-libstdc++ -fPIC'

完成编译后,只需像这样恢复原始文件:

$ cd /usr/lib/gcc/x86_64-linux-gnu/4.8
$ sudo cp crtbeginT.orig.o crtbeginT.o
$ sudo rm crtbeginT.orig.o

答案2

您可以使用以下方式检索预编译版本静态获取

static-get -x coreutils

相关内容