Forum: PC-Programmierung gcc - Problem mit Ubuntu


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von R. M. (n_a_n)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
reinhard@reinhard-TUXEDO:~/Schreibtisch/myC/BiquadFilterExamples$ gcc -lm -o BQ BQ.c
/tmp/ccg357OV.o: In Funktion »main«:
BQ.c:(.text+0x32d): Warnung: undefinierter Verweis auf »cexp«
BQ.c:(.text+0x509): Warnung: undefinierter Verweis auf »cabs«
BQ.c:(.text+0x55c): Warnung: undefinierter Verweis auf »atan2«
/tmp/ccg357OV.o: In Funktion »calcBiquad«:
BQ.c:(.text+0x7ab): Warnung: undefinierter Verweis auf »pow«
BQ.c:(.text+0x7ca): Warnung: undefinierter Verweis auf »tan«
BQ.c:(.text+0xe07): Warnung: undefinierter Verweis auf »sqrt«
BQ.c:(.text+0xe72): Warnung: undefinierter Verweis auf »sqrt«
BQ.c:(.text+0xf15): Warnung: undefinierter Verweis auf »sqrt«
BQ.c:(.text+0x101f): Warnung: undefinierter Verweis auf »sqrt«
BQ.c:(.text+0x10b6): Warnung: undefinierter Verweis auf »sqrt«
/tmp/ccg357OV.o:BQ.c:(.text+0x110d): Warnung: weitere undefinierte Verweise auf »sqrt« folgen
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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch Moderator
von leo (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von R. M. (n_a_n)


Bewertung
0 lesenswert
nicht lesenswert
Danke, das war es.
(Wobei ich mir fast sicher bin, das es bei meinem alten System auch mit 
dieser Reihenfolge geklappt hat) -- aber egal.
Danke nochmal.
Reinhard

von R. M. (n_a_n)


Bewertung
0 lesenswert
nicht 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.
------------------------------------------------------------------------ 
-------

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
R. M. schrieb:
> Wobei ich mir fast sicher bin, das es bei meinem alten System auch mit
> dieser Reihenfolge geklappt hat

Naja, bei dynamischem Linken sind die Leute schlampig geworden.

Wenn man statisch linkt, war die Reihenfolge schon immer entscheidend, 
daher sollte man es sich auch grundsätzlich so angewöhnen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.