static lib mit g++
Re: static lib mit g++
Naja irgendwie ist es klar. Du hast beim Erstellen deiner Lib nirgends angegeben, dass SDL und OpenGL gelinkt werden sollen.
Re: static lib mit g++
Und wie tue ich das?
Re: static lib mit g++
Nein, ist es nicht ^^ Eigentlich sollte das Linken erst beim Erstellen der ausführbaren Datei notwendig sein, was du ja machst. Das könntest du noch versuchen:dani93 hat geschrieben:Naja irgendwie ist es klar.
http://stackoverflow.com/questions/1411 ... ic-library
Ansonsten muss ich mir wirklich mal dein Setup nachbauen und selbst damit rumspielen, bevor das ganze hier noch in einer Compiler-Flag-Raterei ausartet.
Vielleicht liegts daran, dass du in den Dateien Includes auf die Bibliotheken hast.Architekt hat geschrieben:Aber gebe ich -lSGL mit an, bekomme ich diese ganzen undefinierten Referenzen, wie in zwie Post zuvor angegeben. Das ist doch seltsam, oder?
Re: static lib mit g++
Mit am Ende hört g++ gar nicht mehr auf Fehler auszuspucken und ich musste ihn nach 5 sekunden mit strg + c stoppen... o.O Ich lad dir mal noch 'ne aktuelle .zip hoch... ^^ Danke.
edit:
http://www.file-upload.net/download-933 ... L.zip.html
Code: Alles auswählen
-Wl,--whole-archive -lSGL
edit:
http://www.file-upload.net/download-933 ... L.zip.html
Re: static lib mit g++
Du musst statt -lSGL auch den ganzen Pfad angeben.Architekt hat geschrieben:Mitam Ende hört g++ gar nicht mehr auf Fehler auszuspucken und ich musste ihn nach 5 sekunden mit strg + c stoppen... o.O Ich lad dir mal noch 'ne aktuelle .zip hoch... ^^ Danke.Code: Alles auswählen
-Wl,--whole-archive -lSGL
Re: static lib mit g++
Sprich so?
Da kommt nämlich dasselbe Resultat bei raus.
Code: Alles auswählen
compile:
$(CC) -c main.cpp $(CFLAGS) $(INCLUDE_PATH)
$(CC) -o main.exe main.o $(CFLAGS) $(LIB_PATH) $(LIB_FLAGS) -Wl,--whole-archive C:\Users\Besitzer\Documents\SGL\libs\lib\libSGL.a
Re: static lib mit g++
Ok, es klappt nun soweit. Bzw. es hat eig. scheinbar schon immer geklappt, aber aus irgendeinem Grund kann der Linker die Referenz zur Window Klasse nicht auflösen.
Das hier funktioniert:
Kommentiere ich allerdings Zeile 7 aus, dann bekomme ich diese undefinierten Linker Fehler:
http://codepad.org/BiOxFccq
http://codepad.org/1uLaj1q6
edit:
Nachdem ich nun einen Standard Konstuktor für Window hinzugefügt habe und diesen aufrufe:
Bekomme ich nun diese Meldung:
Hier mal .cpp und .hpp:
http://codepad.org/yu43eRHd
http://codepad.org/Fp1I2w1N
Seht ihr auf Anhieb etwas?
Das hier funktioniert:
Code: Alles auswählen
#include <iostream>
#include <string>
#include <SGL/Window/Window.hpp>
#include <SGL/Math/vec2.hpp>
int main() {
// sgl::Window wnd(400, 600, "Hallo Welt");
sgl::vec2f v(42, 23);
std::cout << v.x << ':' << v.y << std::endl;
return 0;
}
Anbei meine jetzigen makefiles:main.o:main.cpp:(.text+0x60): undefined reference to `sgl::Window::Window(unsign
ed short, unsigned short, std::string const&, sgl::Window::Flags)'
main.o:main.cpp:(.text+0xe8): undefined reference to `sgl::Window::~Window()'
main.o:main.cpp:(.text+0x116): undefined reference to `sgl::Window::~Window()'
d:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: main.o: ba
d reloc address 0x0 in section `.ctors'
d:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link
failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
make: *** [compile] Error 1
http://codepad.org/BiOxFccq
http://codepad.org/1uLaj1q6
edit:
Nachdem ich nun einen Standard Konstuktor für Window hinzugefügt habe und diesen aufrufe:
Code: Alles auswählen
sgl::Window wnd;//(w, h, title);
Es wirkt so, als wäre meine Window.cpp beschädigt, oder?g++ -LC:\Users\Besitzer\Documents\SGL\libs\lib -std=c++0x -Wall -static -lSDL2 -
lSDL2_image -lSDL2_ttf -lSDL2_mixer -lopengl32 -lglew32 -lSGL -o main.exe main.o
main.o:main.cpp:(.text+0xc9): undefined reference to `sgl::Window::~Window()'
main.o:main.cpp:(.text+0xf3): undefined reference to `sgl::Window::~Window()'
main.o:main.cpp:(.text$_ZN3sgl6WindowC1Ev[__ZN3sgl6WindowC1Ev]+0xfffffffffffffd0
e): undefined reference to `vtable for sgl::Window'
d:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: main.o: ba
d reloc address 0xe in section `.text$_ZN3sgl6WindowC1Ev[__ZN3sgl6WindowC1Ev]'
d:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link
failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
make: *** [compile] Error 1
Hier mal .cpp und .hpp:
http://codepad.org/yu43eRHd
http://codepad.org/Fp1I2w1N
Seht ihr auf Anhieb etwas?

Re: static lib mit g++
Ok, nach weiteren Recherchen lässt sich vermuten, dass Konstruktoren irgendwie nicht richtig in die lib eingebunden werden. Sobald ich etwas anderes als den Standard Konstruktor von Window benutzen möchte oder den Standard Konstruktor meiner Matrix Klasse verwende (die ein Member von Window ist), dann crasht es. Kommentiere ich diesen Member aus und benutze den Standard Konstruktor von Window, dann funktioniert alles. Wie ist das möglich?
Mit Destruktoren scheint dasselbe Problem zu existieren.
Also wenn ich da nicht langsam mal eine gescheite Lösung für MinGW hin bekomme, ist der Compiler ja mal sowas von für mich gestorben.
Ich muss echt zugestehen: Solche Probleme hatte ich mit VS noch nie.
Ich dachte nur, ich probier mal MinGW aus, wer hätte gedacht dass dieses Teil derart beschränkt ist. 
Mit Destruktoren scheint dasselbe Problem zu existieren.
Also wenn ich da nicht langsam mal eine gescheite Lösung für MinGW hin bekomme, ist der Compiler ja mal sowas von für mich gestorben.



Re: static lib mit g++
Habe auf VS gewechselt und alles läuft reibungslos. Kann geclosed werden. (: Es lebe VS!
Re: static lib mit g++
Ja, unter Windows immer noch die beste Lösung.