gcc - Problem mit Ubuntu

OP #6299207
Lesenswert?

Hallo Forumisten, vielleicht kann mir jemand bei folgendem Problem 
helfen:
Ich habe einen neuen PC mit Ubuntu gekauft.

-Version-
Kernel    : Linux 5.3.0-53-generic (x86_64)
Version    : #47~18.04.1-Ubuntu SMP Thu May 7 13:10:50 UTC 2020
C-Library    : GNU C Library / (Ubuntu GLIBC 2.27-3ubuntu1) 2.27
Distribution    : Ubuntu 18.04.4 LTS

Auf meinem alten PC habe ich mehrere Programme erstellt, und die möchte 
ich nun portieren. Dabei tritt bei einigen Programmen beim Compilieren 
ein Fehler auf,
die meisten lassen sich problemlos neu übersetzen.

Ein Fehlerbeispiel:
1
reinhard@reinhard-TUXEDO:~/Schreibtisch/myC/BiquadFilterExamples$ gcc -lm -o BQ BQ.c
2
/tmp/ccg357OV.o: In Funktion »main«:
3
BQ.c:(.text+0x32d): Warnung: undefinierter Verweis auf »cexp«
4
BQ.c:(.text+0x509): Warnung: undefinierter Verweis auf »cabs«
5
BQ.c:(.text+0x55c): Warnung: undefinierter Verweis auf »atan2«
6
/tmp/ccg357OV.o: In Funktion »calcBiquad«:
7
BQ.c:(.text+0x7ab): Warnung: undefinierter Verweis auf »pow«
8
BQ.c:(.text+0x7ca): Warnung: undefinierter Verweis auf »tan«
9
BQ.c:(.text+0xe07): Warnung: undefinierter Verweis auf »sqrt«
10
BQ.c:(.text+0xe72): Warnung: undefinierter Verweis auf »sqrt«
11
BQ.c:(.text+0xf15): Warnung: undefinierter Verweis auf »sqrt«
12
BQ.c:(.text+0x101f): Warnung: undefinierter Verweis auf »sqrt«
13
BQ.c:(.text+0x10b6): Warnung: undefinierter Verweis auf »sqrt«
14
/tmp/ccg357OV.o:BQ.c:(.text+0x110d): Warnung: weitere undefinierte Verweise auf »sqrt« folgen
15
collect2: error: ld returned 1 exit status
Auf meinem alten System lies sich das problemlos so übersetzen.
Es hat etwas mit dem linken mit der libm zu tun(?)
Muss ich bei einem 64bit System eine andere lib verwenden und wenn ja 
welche?
Ich weis es einfach nicht und bin für jede Hilfe dankbar.
Angehängte Dateien:
Moderator Persönliche Seite #6299215
Lesenswert?

R. M. schrieb:
> Es hat etwas mit dem linken mit der libm zu tun(?)

Ja.

> Muss ich bei einem 64bit System eine andere lib verwenden und wenn ja
> welche?

Nein.

Es hat was damit zu tun, dass du die Idee hinter dem Linken von 
Bibliotheken nicht verstanden hast: diese werden vom Linker zur 
Auflösung undefinierter externer Referenzen benutzt - aber diese müssen 
an der Stelle, wo die Bibliothek "abgearbeitet" wird, auch bereits 
vorliegen.

In deinem Falle hast du die Bibliothek als erstes auf der Kommandozeile 
angegeben. Zu diesem Zeitpunkt ist noch keine einzige Referenz 
undefiniert, daher wird aus dieser Bibliothek nichts entnommen.

Schreib das -lm einfach mal ans Ende der Kommandozeile.

ps: Und: -O (oder -O2 oder sowas) ist Pflicht. Default ist -O0, das 
willst du nicht haben.
OP #6299234
Lesenswert?

@leo
danke für den Link
------------------------------------------------------------------------ 
------
 confirm the unexpected link-order behaviour that you observe with gcc 
5.1 and also that I have the traditional behaviour with gcc 4.9.2. I 
would infer that this novelty comes in with gcc 5.x, and that your 
toolchain is gcc 5.x. Possibly it is a distro-specific anomaly of the 
toolchain build. My toolchain is as per ubuntu 14.04.
------------------------------------------------------------------------ 
-------

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren