2013-07-19 13 views
6

Kiedy powiązanie projektu pracuję na łącznik daje następujące błędy:Niezdefiniowany odniesienia do symbolu, mimo że biblioteka jest powiązana

/usr/bin/ld: ../Includes and Libs/lib/libsfml21rca.a(SoundFile.o): undefined reference to symbol '[email protected]@libsndfile.so.1.0' 

/usr/bin/ld: note: '[email protected]@libsndfile.so.1.0' is defined in DSO /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libsndfile.so so try adding it to the linker command line 

/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libsndfile.so: could not read symbols: Invalid operation 

Chodzi o to, libsndfile.so jest już połączone przed libsfml21rca. a, więc nie mam pojęcia, gdzie jest problem.

Używam Code :: Blocks 10.05

Dzięki za pomoc z góry

EDIT:

Oto komenda powiązanie:

g ++ -L” Zawiera i Libs/lib "-L" Zawiera i Libs/lib/raknet3_731 "-L" Zawiera i Libs/lib/d3d_new/x86 "-L" Zawiera i Libs/lib/ogg "-L" Zawiera i Libs/lib/sdl "-LBullet/lib -o (filename) ... (cała masa plików obiektowych) -lGLEW -lglfw -lGL -lGLU -lpthread -lopenal -ljpeg -lfreetype -lsndfile -lXrandr -lsfml-system -lsfml-window -lsfml-audio ../Bullet /lib/LinearMath.lib ../Bullet/lib/BulletCollision.lib ../Bullet/lib/BulletDynamics.lib "../Includes and Libs/lib/raknet3_731/RakNetLibStaticDebug.lib" "../Includes and Libs/lib/libsfml21rca.a "../../../../../../home/msabol/Desktop/SFML/sfml2st/sfmlVideo/sfmlVideo/bin/Release/libsfmlVideo.a ../ .. /../../../../home/msabol/Desktop/SFML/sfmlVideo/bin/Release/libsfmlVideo.a

+4

Spróbuj zmienić kolejność powiązanie? –

+0

Jak dokładnie mam to zmienić? Wszystko jest połączone we właściwej kolejności, a przynajmniej tak się wydaje. – Matuzalem

+0

Dodaj polecenie C :: B, aby połączyć się z pytaniem. (nie dodawajcie tego jako komentarza!) – greatwolf

Odpowiedz

5

łącznik działa tylko jedno przejście nad plików bibliotecznych. Więc jeśli masz coś w bibliotece A, która potrzebuje czegoś w Bibliotece B, musisz mieć g++ objects... -llibA -llibB, jeśli użyjesz g++ objects... -llibB -llibA, to nie powiedzie się w taki sposób, jak pokazujesz.

Tak, w twoim przypadku umieść -lsndfile po "../Includes and Libs/lib/libsfml21rca.a".

(A czyj był pomysł, aby umieścić w tej przestrzeni „obejmuje i libs” Directory - nie najlepszy pomysł widziałem ...)

+1

Dam ci szansę. W mojej obronie skoczyłem na ten projekt kilka dni temu, więc wszystkie straszne imiona (było ich więcej) nie zostały przeze mnie wykonane. ** EDYCJA: ** Potępienie z powodu wielkiego wybuchu, zadziałało! Dziękuję, Mats Peterson. – Matuzalem

+0

@ Szczerze mówiąc, uważam, że pojedyncze przejście przez bibliotekę jest bardziej odpychające. Pojawiły się niezliczone pytania dotyczące SO, takie jak OP, ze względu na ograniczenie ld' linker. Na przykład narzędzie "LINK" firmy Microsoft nie ma tego problemu. Emballcadero też nie. – greatwolf

+0

@greatwolf Niestety, moim zadaniem jest sprawić, aby projekt działał na platformach Unix. Tyle o "LINK" Microsoftu. – Matuzalem

Powiązane problemy