static lib mit g++

Schnelle objektorientierte, kompilierende Programmiersprache.
nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: static lib mit g++

Beitrag von nufan » Mi Aug 06, 2014 3:46 pm

Naja irgendwie ist es klar. Du hast beim Erstellen deiner Lib nirgends angegeben, dass SDL und OpenGL gelinkt werden sollen.

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

Re: static lib mit g++

Beitrag von Architekt » Mi Aug 06, 2014 3:56 pm

Und wie tue ich das?

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: static lib mit g++

Beitrag von nufan » Mi Aug 06, 2014 4:07 pm

dani93 hat geschrieben:Naja irgendwie ist es klar.
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:
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.
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?
Vielleicht liegts daran, dass du in den Dateien Includes auf die Bibliotheken hast.

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

Re: static lib mit g++

Beitrag von Architekt » Mi Aug 06, 2014 4:13 pm

Mit

Code: Alles auswählen

-Wl,--whole-archive -lSGL
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

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: static lib mit g++

Beitrag von nufan » Mi Aug 06, 2014 4:24 pm

Architekt hat geschrieben:Mit

Code: Alles auswählen

-Wl,--whole-archive -lSGL
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.
Du musst statt -lSGL auch den ganzen Pfad angeben.

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

Re: static lib mit g++

Beitrag von Architekt » Mi Aug 06, 2014 5:32 pm

Sprich so?

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
Da kommt nämlich dasselbe Resultat bei raus.

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

Re: static lib mit g++

Beitrag von Architekt » Mi Aug 06, 2014 7:22 pm

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:

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;
}
Kommentiere ich allerdings Zeile 7 aus, dann bekomme ich diese undefinierten Linker Fehler:
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
Anbei meine jetzigen makefiles:
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);
Bekomme ich nun diese Meldung:
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
Es wirkt so, als wäre meine Window.cpp beschädigt, oder?
Hier mal .cpp und .hpp:
http://codepad.org/yu43eRHd
http://codepad.org/Fp1I2w1N

Seht ihr auf Anhieb etwas? :shock:

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

Re: static lib mit g++

Beitrag von Architekt » Mi Aug 06, 2014 8:20 pm

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. :lol: 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. :roll:

Benutzeravatar
Architekt
Beiträge: 172
Registriert: Sa Mai 24, 2014 12:04 pm

Re: static lib mit g++

Beitrag von Architekt » Mi Aug 06, 2014 9:30 pm

Habe auf VS gewechselt und alles läuft reibungslos. Kann geclosed werden. (: Es lebe VS!

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: static lib mit g++

Beitrag von oenone » Do Aug 07, 2014 7:52 am

Ja, unter Windows immer noch die beste Lösung.

Antworten