... сложности порядка Hello World! - файл ex1.c
Код: Выделить всё
#include <stdio.h>
#include <math.h>
int main( void ) {
float d = 9;
printf( "%f\n", sqrt( d ) );
return 0;
}
И надеемся, что уж с такой то программой мы справимся...
Ага ... ща-а-а-аз:
Код: Выделить всё
olej@nvidia ~/2016_WORK/in.WORK/as-needed $ gcc -Wall -lm ex1.c -o ex1
/tmp/ccUuI8Fy.o: In function `main':
ex1.c:(.text+0x1a): undefined reference to `sqrt'
collect2: error: ld returned 1 exit status
Но стоит поменять местами опции gcc - и всё срабатывает:
Код: Выделить всё
olej@nvidia ~/2016_WORK/in.WORK/as-needed $ gcc -Wall ex1.c -lm -o ex1
olej@nvidia ~/2016_WORK/in.WORK/as-needed $ ./ex1
3.000000
И ещё одна особенность - если то же собирать как приложение C++:
Код: Выделить всё
olej@nvidia ~/2016_WORK/in.WORK/as-needed $ g++ -lm -Wall ex1.c -o ex1++
olej@nvidia ~/2016_WORK/in.WORK/as-needed $ ./ex1++
3.000000
Это не зависит а). ни от версии gcc, б). ни от разрядности системы 32/64...
А зависит это ... от используемого дистрибутива Linux!
Это не возникает в: Fedora, CentOS, Debian ... и даже Rosa, Mageia.
Это возникает в: Ubuntu (со всеми их разнообразными Xubuntu, Lubuntu, Kubuntu...), Mint, Gentoo, ALT Linux.
Не знаю, каким ещё дистрибутивам это свойственно.