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


von T. H. (pumpkin) Benutzerseite


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:

1
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:

1
gcc -L"C:\Dokumente und Einstellungen\pumpkin\Desktop\FTR\library" -o"FTRv1_Eclipse.exe"  ./source/FTRv1_Eclipse.o   -llibvorbis -llibsox
2
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -llibsox
3
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...

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


Lesenswert?

Setze den Optionen mal ein -v hinzu.  Dann siehst du etwas mehr.

von T. H. (pumpkin) Benutzerseite


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-Options.html#Link-Options



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?)?

von T. H. (pumpkin) Benutzerseite


Angehängte Dateien:

Lesenswert?

(Ging nicht anders...)

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


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.

von T. H. (pumpkin) Benutzerseite


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?

von Εrnst B. (ernst)


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.

von T. H. (pumpkin) Benutzerseite


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.