我正在尝试制作 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