Как сделать статический двоичный файл из coreutils?

Я пытаюсь сделать статический двоичный файл из rm, поэтому я попытался скомпилировать coreutils с

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

но я продолжаю сталкиваться с ошибками.

Сначала подайте жалобу на c99 или gnu99, я решил это, добавив -std=gnu99 к значению CC:

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) Если да, то как? (У меня 0 опыта сборки двоичных файлов Linux)

PS: Я загрузил исходный код coreutils с сайта ubuntu, trusty.(Coreutils-8.21)

2 ответа

Решение

Согласно этому комментарию об ошибке # 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

Вы можете получить предварительно скомпилированную версию с помощью static-get

static-get -x coreutils
Другие вопросы по тегам