我正在尝试制作 rm 的静态二进制文件,因此我尝试使用以下命令编译 coreutils
configure; make SHARED=0 CC='gcc -static'; make install
Run Code Online (Sandbox Code Playgroud)
但我一直遇到错误。
首先 make 抱怨 c99 或 gnu99,我通过将 -std=gnu99 添加到 CC 值来解决这个问题:
make SHARED=0 CC='gcc -static -std=gnu99'
Run Code Online (Sandbox Code Playgroud)
之后它说:
/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
Run Code Online (Sandbox Code Playgroud)
我尝试添加 -fPIC 就像添加 -std 选项一样,但无济于事。
甚至可以制作 coreutils 的静态二进制文件吗?(只对 rm 感兴趣)如果是这样,如何?(我有 0 次构建 linux 二进制文件的经验)
PS:我从ubuntu站点下载了coreutils源码,trusty.(coreutils-8.21)