LINUX.ORG.RU

Не могу ничего слинковать в RH7.2


0

0

Сабж :-(

При компиляции просто

  main ()
  {

  }

выдает что-то вроде:

  ld: undefined _start

но бинарник делает, который при запуске говорит:
  Illegal instruction
и все.

Компилил с gcc-2.95 и 2.96 - один хрен.
ld (binutils то есть) из комплекта.
Ни у кого такого нет?
Это совсем уже, блин, слов нет.. :-(

Спасибо!

Ты подробно опиши как файл с текстом называл, как компилятор вызывал, что он тебе в ответ сказал.

asd
()

Вот файл test.c:

int main (int argc, char **argv)
{
    return 0;
}

Дальше:

[etv@localhost Devel]$ gcc -c -Wall -o test.o test.c

[etv@localhost Devel]$ gcc -o test test.o
/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 080482a0

[etv@localhost Devel]$ ./test
Illegal instruction

[etv@localhost Devel]$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)

[etv@localhost Devel]$ ld -v
GNU ld version 2.11.90.0.8 (with BFD 2.11.90.0.8)

murla
() автор топика

Э... Как-бы даже не знаю что сказать...

asd
()

У тебя умолчательные опции не прописаны, видимо.
Т.е. по каким-то причинам это самое твое
/usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
содержит неверную информацию (или его вообще постирали).

Переставляй gcc, проще будет.

Функция _start должна быть в /usr/lib/crt1.o
Что говорит nm /usr/lib/crt1.o ?

Хотя, может, у тебя crt1.o в другом месте.

Если охота потрахаться, посмотри, что выдаст
gcc -v -o test test.c

Посмотри, где crt1.o, и посмотри, есть ли там _start


Die-Hard ★★★★★
()

:-))

Мерси большое die-Hard!
Все работает теперь.

Фигня в том, что я тут на работе под Дебианом, и гляжу,
тут все биб-ки при установке strip'аются, а в Редхеде - нет.
Ну, я все .so-файлы и объектники за одно через find пострипал
:-)) nm /usr/lib/crt1.o дал "no symbols".
Вощем лох я позорный, не рюхаю в этом толком ничего ;-)
А что это за объектники в /usr/lib/ ?

Спасибо еще раз.

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

> А что это за объектники в /usr/lib/ ?
Ну, различные инициализационные функции, типа _start.
crt0.o, gcrt0.o - стартовые файлы для a.out
а всякая дрянь типа
crt1.o, crti.o, gcrt1.o. -
ELF'овские.

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