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

5

Я пытаюсь создать статический двоичный код 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)

    
задан Nicolas Mommaerts 30.09.2014 в 16:54
источник

2 ответа

7

За это комментарий об ошибке # 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
    
ответ дан Sylvain Pineau 30.09.2014 в 18:04
источник
3

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

static-get -x coreutils
    
ответ дан Javier López 23.06.2015 в 16:41