Я пытаюсь сделать статический двоичный файл комнаты, таким образом, я пытался компилировать 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 как я добавил - опция станд., но напрасно.
Даже возможно сделать статические двоичные файлы coreutils? (только заинтересованный комнатой) Если так, как? (У меня есть 0 опыта с созданием двоичных файлов Linux),
PS: Я загрузил coreutils источник с сайта человечности, надежного человека. (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
кроме того, добавьте -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 -x coreutils