Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.05.2009, 22:17

Linker Reihenfolge

Hi, ich benutze Codeblocks + MinGw (der aus dem CB 8.02 Pack).
Mir passiert es irgendwie andauernd, dass der Linker irgendetwas nicht findet, und wenn ich dann die Reihenfolge umstelle, geht es auf einmal.
Normalerweise ging es immer mit etwas ausprobieren, aber ich fummel jetzt schon eine ganze Zeit lang und immer findet er irgendetwas nicht.
Kann mir jemand mal genau erklären, was das mit der Linekrreihenfolge auf sich hat, warum das so ist, und wie man es immer hinbekommt, dass es stimmt?

Im Moment hab ichs so:
Mrl
glfw
glu32
glew
opengl32
gdi32
Assimp
ilut
DevIL
ilu

(Mrl ist eine Lib von mir und benötigt glew, ilut, DevIL, ilu und Assimp).
Lieber dumm fragen, als dumm bleiben!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

11.05.2009, 08:33

Zitat von »"Jonathan_Klein"«

[...] und immer findet er irgendetwas nicht.


Ein wenig unpräzise. Sag uns doch mal weiter was der Linker denn so erzählt... ;)

3

11.05.2009, 09:38

Zitat von »"Mein Linker"«

||=== MRL Sample, Release ===|
C:\Eigene Dateien\Codeblocks\Projects\MRL\lib\libMrl.a(MeshData.o):MeshData.cpp:(.text+0x553)||undefined reference to `__imp____glewGenBuffers'|
C:\Eigene Dateien\Codeblocks\Projects\MRL\lib\libMrl.a(MeshData.o):MeshData.cpp:(.text+0x579)||undefined reference to `__imp____glewBindBuffer'|
C:\Eigene Dateien\Codeblocks\Projects\MRL\lib\libMrl.a(MeshData.o):MeshData.cpp:(.text+0x5bf)||undefined reference to `__imp____glewBufferData'|
C:\Eigene Dateien\Codeblocks\Projects\MRL\lib\libMrl.a(MeshData.o):MeshData.cpp:(.text+0x5ce)||undefined reference to `__imp____glewMapBuffer'|
C:\Eigene Dateien\Codeblocks\Projects\MRL\lib\libMrl.a(MeshData.o):MeshData.cpp:(.text+0x6a0)||undefined reference to `__imp____glewUnmapBuffer'|
C:\Eigene Dateien\Codeblocks\Projects\MRL\lib\libMrl.a(MeshData.o):MeshData.cpp:(.text+0xb43)||undefined reference to `__imp____glewGenBuffers'|
C:\Eigene Dateien\Codeblocks\Projects\MRL\lib\libMrl.a(MeshData.o):MeshData.cpp:(.text+0xb69)||undefined reference to `__imp____glewBindBuffer'|
C:\Eigene Dateien\Codeblocks\Projects\MRL\lib\libMrl.a(MeshData.o):MeshData.cpp:(.text+0xbaf)||undefined reference to `__imp____glewBufferData'|
C:\Eigene Dateien\Codeblocks\Projects\MRL\lib\libMrl.a(MeshData.o):MeshData.cpp:(.text+0xbbe)||undefined reference to `__imp____glewMapBuffer'|
C:\Eigene Dateien\Codeblocks\Projects\MRL\lib\libMrl.a(MeshData.o):MeshData.cpp:(.text+0xc90)||undefined reference to `__imp____glewUnmapBuffer'|
||=== Build finished: 10 errors, 0 warnings ===|
Lieber dumm fragen, als dumm bleiben!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

11.05.2009, 10:50

hm komisch. und es hängt von der reihenfolge ab was er nicht findet? kanns sein dass ein paar libs sich da net so gern haben!?
oder hast du vielleicht eine veraltete/falsche version von glew (sollt die nicht glew32 heißen!?)

5

11.05.2009, 16:00

Also wenn ich z.B. Mrl ans Ende der Liste setze findet der Linker eine Menge Ogl, Assimp und Devil Funktionen nicht. Und zusätzlich auch die ganzen glew Funktionen nicht.
In einem anderen Projekt habe ich glew verwendet, und alles ging wunderbar, nur seit ich dort Mrl eingebaut habe und dann in Mrl glew gibt es bei dem Projekt die selben Probleme.
Was ja auch interessant ist, ist dass er ein gelinktes glew in Mrl selber total ignoriert. Ich muss glew in dem Projekt, dass Mrl benutzt einbinden, bzw. denke dass, denn er link es in Mrl nicht mit. Nur leider findet er jetzt trotzdem nix.

Ich meine, wenn je nach Reihenfolge Fehler kommen, muss es ja definitv von der Reihenfolge des Linkens abhängen. Dann muss es dafür aber doch auch Strategien geben, wie man es schafft, dass alles funktioniert (ähnlich wie beim inkludieren).
Lieber dumm fragen, als dumm bleiben!

6

12.05.2009, 17:20

Hm, Mist, ich habe vergessen GLEW_STATIC zu definieren....

Trotzdem bleibt die Frage, wieso das mit der Linkerreihenfolge so ist, wie es nunmal ist.
Lieber dumm fragen, als dumm bleiben!

FalkT

Treue Seele

Beiträge: 125

Wohnort: AC

  • Private Nachricht senden

7

13.05.2009, 18:04

Zitat von »"Jonathan_Klein"«

Trotzdem bleibt die Frage, wieso das mit der Linkerreihenfolge so ist, wie es nunmal ist.


Das ist ein Verhalten des Linkers, wenn eine Bibliothek weitere Abhängigkeiten hat müssen diese im Anschluss auch wieder aufgelöst werden. Ich kenne Projekte, bei denen man eine Lib mehrfach hinzulinken muss, wegen zyklischen Abhängigkeiten.

Über Sinn und Zweck von dem Linker-Verhalten kann man spekulieren. Der MSVC fährt an der Stelle eine andere Philosophie, deswegen gibts auch so geniale Linker-Commands wie

Zitat

/FORCE:MULTIPLE
.

8

13.05.2009, 18:45

Hm, also meinst du, wenn er etwas nicht findet, und man durch verändern der Reihenfolge keinen Erfolg hat, soll man die Lib einfach ein zweites mal, an einer anderen Stelle linken?
Und wie kann man ungefähr auf die richtige Reihenfolge und Position kommen?
Lieber dumm fragen, als dumm bleiben!

FalkT

Treue Seele

Beiträge: 125

Wohnort: AC

  • Private Nachricht senden

9

13.05.2009, 23:01

Durch die bestehenden Abhängigkeiten.
Im Endeffekt hat man bei X verschiedenen Libs X! Möglichkeiten in der Linkreihenfolge.
Warum sollte deine Reihenfolge genau die Richtige sein ?

Werbeanzeige