Странно работает компоновщик (Компоновщик не компонует даже простейшие проги.)

Модератор: Модераторы разделов

Аватара пользователя
drag0n
Сообщения: 156
Статус: Дракон-линуксоид
ОС: Slackware Linux

Странно работает компоновщик

Сообщение drag0n »

Для примера написал подобную программу:

Код: Выделить всё

#include <stdio.h>
#include <math.h>

int main ()
{
        double x = 9.0;
        double y;

        y = sqrt (x);
        printf ("%f\n", y);

        return 0;
}


Компилирую [09:04:03] [drag0n] gcc -c test.c, а затем компоную объектный файл [09:15:49] [drag0n] ld test.o. В итоге компоновщик ругается так:

Код: Выделить всё

ld: warning: cannot find entry symbol _start; defaulting to 0000000008048074
test.o: In function `main':
test.c:(.text+0x42): undefined reference to `sqrt'
test.c:(.text+0x67): undefined reference to `printf'

Заголовочные файлы в stdio.h и math.h в системе присутствуют в /usr/include. GCC версии 4.1.2. LD версии 2.17.50.0.17.20070615. Почему компоновщик так странно работает???
После каталога /etc понимаешь, что реестр - место, откуда нормальными не возвращаются.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: Странно работает компоновщик

Сообщение /dev/random »

Он работает правильно. Если идет компоновка вручную (хотя зачем, для таких-то простых программ?), то следует указывать компоновщику все линкуемые файлы. Включая стандартную библиотеку C. Ведь компоновщик не знает, на каком языке был написан исходный файл (в объектном файле этой инфы уже нет), и не может предположить, стандартную библиотеку какого языка использовать.

Указывается тем же ключом -l, что и в gcc.
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: Странно работает компоновщик

Сообщение BlackStar »

drag0n, gcc test.c -lm
LightLang Team
Спасибо сказали: