LINUX.ORG.RU

gcc, а потом ld


0

0

[andrew@localhost viewer]$ gcc -c view.c
[andrew@localhost viewer]$ ld view.o -lc
ld: warning: cannot find entry symbol _start; defaulting to 08048770
[andrew@localhost viewer]$ ld view.o -e main -lc
[andrew@localhost viewer]$ ./a.out
bash: ./a.out: /usr/lib/libc.so.1: bad ELF interpreter: Нет такого файла или каталога

[andrew@localhost viewer]$ ldd a.out
/usr/bin/ldd: ./a.out: /usr/lib/libc.so.1: bad ELF interpreter: Нет такого файла или каталога

если с опцией "-c"
[andrew@localhost viewer]$ ldd view
        linux-gate.so.1 =>  (0xffffe000)
        libc.so.6 => /lib/libc.so.6 (0xb7dcc000)
        /lib/ld-linux.so.2 (0xb7f19000)

Как собрать именно так чтобы вначале gcc, а потом ld?

Результат вполне закономерный - нет crtbegin.o и компании.

Сделай gcc -v и поймешь, как compiler driver вызывает линкер.

anonymous
()
Ответ на: комментарий от anonymous

[andrew@localhost o]$ gcc -c view.c
[andrew@localhost o]$ ld crt1.o crti.o crtn.o crtbegin.o crtend.o view.o -lc
[andrew@localhost o]$ ./a.out
bash: ./a.out: /usr/lib/libc.so.1: bad ELF interpreter: Нет такого файла или каталога

NoName
() автор топика
Ответ на: комментарий от NoName

Разве compiler driver использовал именно такую команду именно с такими опциями?

Ну не указал ты dynamic-linker, к примеру, как и кучу других полезных вещей.

anonymous
()

Я в одно не врубаюсь - за использование `gcc *.o -o a.out` грозит пытками инквизиция и вместо девочек с музыкой предлагают "железную деву" с воплями? ;)

e
()
Ответ на: комментарий от anonymous

[andrew@localhost o]$ ld /usr/libexec/gcc/i386-asplinux-linux/4.0.2/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc/i386-asplinux-linux/4.0.2/../../../crt1.o /usr/lib/gcc/i386-asplinux-linux/4.0.2/../../../crti.o /usr/lib/gcc/i386-asplinux-linux/4.0.2/crtbegin.o -L/usr/lib/gcc/i386-asplinux-linux/4.0.2 -L/usr/lib/gcc/i386-asplinux-linux/4.0.2 view.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i386-asplinux-linux/4.0.2/crtend.o /usr/lib/gcc/i386-asplinux-linux/4.0.2/../../../crtn.o
[andrew@localhost o]$ ./a.out
Ошибка сегментирования

NoName
() автор топика
Ответ на: комментарий от NoName

Русским языком ж сказали, `gcc -v ...` спасет отца русской демократии.

e
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.