gcc - Problem mit Ubuntu

OP #6299207
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
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
@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

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.