Re: порядок аргументов gcc

[email protected]
Newsgroups gmane.linux.debian.user.russian
Message-ID <[email protected]>
On Fri, 4 Sep 2020, sergio wrote:

>
> gcc -lusb file.c
>
> раньше работало, а теперь ругается на undefined reference и надо говорить
>
> gcc file.c -lusb
>
>
> Что произошло и что поменялось?
>
> --
> sergio.

   "undefined reference" это ругается компоновщик (linker).
   В принципе, для компоновщика всегда было правило, что
   неопределенные функции ищутся в библиотеках слева направо.
   То есть, если стоит -lu1 -lu2, то неопределенные
   символы в u2 не ищутся в u1.

   В случае с компилируемыми файлами, раньше они всегда переставлялись
   в крайнюю левую позицию до библиотек и поэтому работало.

   > gcc -dumpversion
4.8.5
   > gcc -lm math.c
   OK

   Теперь, видимо, решили унифицировать:
   > gcc -dumpversion
10
   > LANG=C gcc -lm math.c
undefined reference

   Кленг пока еще работает по старому.
   > clang -dumpversion
9.0.1
   > clang -lm math.c
OK

   Вот с какой версии gcc это началось, самому интересно,
   найду, напишу.
Ю.

p.s. "math.c"
#include <stdio.h>
#include <math.h>

int main() {
   double x = 3.5;
   printf("          %.1f  %.1f\n",x,-x);
   printf("ceil      %.1f  %.1f\n",ceil(x),ceil(-x));
   printf("floor     %.1f  %.1f\n",floor(x),floor(-x));
   printf("round     %.1f  %.1f\n",round(x),round(-x));
   printf("trunc     %.1f  %.1f\n",trunc(x),trunc(-x));
   printf("nearbyint %.1f  %.1f\n",nearbyint(x),nearbyint(-x));
   return 0;
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.