Nic*_*rts 5 gcc binary make coreutils
我正在尝试制作 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)
根据对错误 # 640734 的评论,您可以尝试一种解决方法:
$ cd /usr/lib/gcc/x86_64-linux-gnu/4.8
$ sudo cp crtbeginT.o crtbeginT.orig.o
$ sudo cp crtbeginS.o crtbeginT.o
Run Code Online (Sandbox Code Playgroud)
另外,添加-fPIC到上面的命令:
make SHARED=0 CFLAGS='-static -std=gnu99 -static-libgcc -static-libstdc++ -fPIC'
Run Code Online (Sandbox Code Playgroud)
完成编译后,只需像这样恢复原始文件:
$ cd /usr/lib/gcc/x86_64-linux-gnu/4.8
$ sudo cp crtbeginT.orig.o crtbeginT.o
$ sudo rm crtbeginT.orig.o
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10673 次 |
| 最近记录: |