Eclipse CDT & GCC: "ld: cannot find -llibsox"

OP Persönliche Seite #894540
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...
OP Persönliche Seite #894754
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?)?
OP Persönliche Seite #894807
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?

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