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;
}

Ответить