www.mikrocontroller.net

Forum: Compiler & IDEs Eclipse CDT & GCC: "ld: cannot find -llibsox"


Autor: T. H. (pumpkin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

bin gerade dabei mich zum ersten mal mit Eclipse CDT zu beschäftigen. 
Und gleich mit Anlaufschwierigkeiten - wie solls auch anders sein?  ;^)
Also der Reihe nach. Ich nutze Cygwin und den GCC für den Eclipse. Ich 
hab ein neues C-Projekt angelegt und die libvorbis.a dazugelinkt:

gcc -L"C:\Dokumente und Einstellungen\pumpkin\Desktop\FTR\library" -o"FTRv1_Eclipse.exe"  ./source/FTRv1_Eclipse.o   -llibvorbis

Im angegeben Pfad befindet sich die libvorbis, was mich stutzig macht 
ist, dass er diese auch ohne Pfadangabe linken kann - wohl aus den 
GCC-Defaults?

Nun möchte ich die libsox.a ebenfalls hinzulinken. Die hab ich mit 
Cygwin compilert und ebenfalls in den library-Ordner gegeben:

gcc -L"C:\Dokumente und Einstellungen\pumpkin\Desktop\FTR\library" -o"FTRv1_Eclipse.exe"  ./source/FTRv1_Eclipse.o   -llibvorbis -llibsox
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -llibsox
collect2: ld returned 1 exit status

Slashes statt Backslashes versucht - nix. Okay, da der Linker 
anscheinend auf ein Cygwin-Folder zugreift hab ich die libsox.a in 
../cygwin/lib und ../cygwin/usr/lib kopiert um zu sehen was passiert. 
Leider nicht viel, gleicher Fehler.

Unter Dev-C++ flutscht es wunderbar (interessanterweise ist der Aufruf 
des gcc's mit Zusatzlibs hier etwas anders), allerdings ist der Debugger 
dort ein wenig hakelig. Mit Eclipse lässt sich schon sehr schön 
arbeiten.

Woran kann das liegen? Hab ich was übersehen oder falsch/nicht 
verstanden? Ist wahrscheinlich zu spät für heute...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Setze den Optionen mal ein -v hinzu.  Dann siehst du etwas mehr.

Autor: T. H. (pumpkin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

ich hab den "Fehler" gefunden [1]:


  ... The only difference between using an -l option and specifying a
  file name is that -l surrounds library with `lib' and `.a' and
  searches several directories.



Ich hatte immer libsox, libvorbis etc geschrieben. Nur vorbis, sox etc 
ist richtig. Dennoch: warum hat er das nur bei der sox angemahnt?

[1] 
http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Link-O...



Edit: Im Anhang mal die Konsole. Die Pfade usr/lib/... gibt es nicht. 
Stattdessen wäre lib/... korrekt. Hat --prefix etwas damit zu tun (finde 
keine Info in der Doku - schaue ich in der falschen?)?

Autor: T. H. (pumpkin) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
(Ging nicht anders...)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hast du ja doch noch eine liblibvorbis.a?  Keine Ahnung,
warum es sonst gegangen wäre...

Sorry, das mit dem lib hätte ich natürlich gleich sehen können, da
habe ich wohl zu flüchtig geguckt.

Autor: T. H. (pumpkin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, das ist das Kuriose...

Jetzt wo ich dachte das Geeier ist vorbei kommt der nächste Punkt:

[schnipp]
C:/Dokumente und 
Einstellungen/pumpkin/Desktop/FTR/library/libsox.a(libsox_la-vorbis.o): 
In function `startread':
/cygdrive/c/cygwin/tmp/sox-14.0.1/src/vorbis.c:111: undefined reference 
to `_ov_open_callbacks'
/cygdrive/c/cygwin/tmp/sox-14.0.1/src/vorbis.c:133: undefined reference 
to `_ov_pcm_total'
C:/Dokumente und 
Einstellungen/pumpkin/Desktop/FTR/library/libsox.a(libsox_la-vorbis.o): 
In function `read':
/cygdrive/c/cygwin/tmp/sox-14.0.1/src/vorbis.c:187: undefined reference 
to `_ov_read'
C:/Dokumente und 
Einstellungen/pumpkin/Desktop/FTR/library/libsox.a(libsox_la-vorbis.o): 
In function `stopread':
/cygdrive/c/cygwin/tmp/sox-14.0.1/src/vorbis.c:253: undefined reference 
to `_ov_clear'
[schnapp]

Der Linker findet die Funktionen in den anderen Libs nicht - sie werden 
aus der libsox.a gecallt. Diese liegen am gleichen Ort wie die libsox.a, 
der Pfad ist gesetzt und die betreffenden Libs werden vor der libsox.a 
gelinkt:

  gcc -L"C:/Dokumente und Einstellungen/pumpkin/Desktop/FTR/library"
  -o"FTRv1_Eclipse.exe"  ./source/FTRv1_Eclipse.o   -lvorbis -lvorbisenc
  -lvorbisfile -lao.dll -lfftw3 -lFLAC -lsox

Keine Ahnung was hier schief läuft. Verständnisfrage: Warum taucht in 
der Konsole "/cygdrive/c/cygwin/tmp/sox-14.0.1/src/vorbis.c:187" auf 
obwohl die Lib (sox) woanders liegt und der betreffende Pfad nirgens 
gesetzt ist?

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch mal die Reihenfolge der Libs zu ändern.
Und evtl mal die "libsox.la"-Datei anschauen, die ist zwar für libtool, 
aber vielleicht siehst du darin, welche libs noch fehlen.

Autor: T. H. (pumpkin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oha, interessant. In der .la ist der Pfad auf usr/lib/ gesetzt. Schmeiße 
ich die betreffenden Libs da rein dann geht es. Wieso nicht mit dem 
manuellen Pfad per -L?

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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