Вручную скомпилировать с помощью gcc -v - PullRequest
2 голосов
/ 23 апреля 2011

Можно ли скомпилировать простую программу Hello World, которая использует только предоставленные файлы gcc / glibc, а не стандартные, предоставляемые ОС? (Поэтому при выполнении программа будет использовать только предоставленные файлы, а не те, которые предоставляет ОС.) Я искал везде в сети, но не могу заставить что-либо работать:

Я пытался вручную сделать то, что делает gcc -v simple.c , но сам не могу воспроизвести это.

Это то, что я пробовал: (все предоставленные файлы находятся на рабочем столе)

 /home/myuser/Desktop/cc1 -quiet -v simple.c -quiet -dumpbase simple.c -mtune=generic -auxbase simple -version -o /tmp/temp1.s

Как можно изменить приведенные ниже пути на пользовательские, а не по умолчанию?

ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include  search starts here:
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.4.5/include
 /usr/lib/gcc/x86_64-linux-gnu/4.4.5/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
GNU C (Debian 4.4.5-8) version 4.4.5 (x86_64-linux-gnu)
    compiled by GNU C version 4.4.5, GMP version 4.3.2, MPFR version 3.0.0-p3.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: dac4d891d068d1bed01868869b00bd17
as -V -Qy -o /tmp/temp2.o /tmp/temp1.s
GNU assembler version 2.20.1 (x86_64-linux-gnu) using BFD version (GNU Binutils for Debian) 2.20.1-system.20100303
/home/myuser/Desktop/collect2 --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=both -dynamic-linker ld-2.11.2.so crt1.o crti.o crtbegin.o /tmp/temp2.o libgcc.a --as-needed libgcc_s.so.1 --no-as-needed libc.a libgcc_s.so.1 --as-needed libgcc.a --no-as-needed crtend.o crtn.o

Почему ниже приведенный / usr / bin / ld используется вместо предоставленного ld-2.11.2.so?

/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie
collect2: ld returned 1 exit status

Кто-нибудь может изменить его на работу?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2011

Как можно изменить указанные ниже пути на пользовательские, а не по умолчанию?

Просто добавьте -I path к вызову компилятора.Этот путь будет добавлен перед внутренними путями.

Почему ниже приведенный / usr / bin / ld используется вместо предоставленного ld-2.11.2.so?

Первый - исполняемый двоичный файл, второй - общий объект.Вы не можете использовать общий объект вместо двоичного.

0 голосов
/ 23 апреля 2011

-v показывает действия, выполняемые драйвером компилятора.Это не влияет на то, какие стандартные библиотеки вы получаете.

Для запуска со всеми пользовательскими библиотеками используйте -nostdlib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...