QT-Programme statisch linken????



  • Ok, ich hab grade mal n bisschen mit dem QT Creator herumgespielt, weil mich plattformübergreifende GUI programmierung interessiert. Später hab ich dann mal nen Test gemacht: Hab ganz einfach Hallo Welt in cpp als "qt console application" kompiliert.
    Ok, alles super, mit qt ging es auch. Als ich die exe aber später so ausführen wollte, bekam ich ne fehlermeldung, mingw10.dll könne man nicht finden. Sobald die ( kopiert aus dem qt ordner) im projektordner war, ging es.
    Dassselbe problem hatte ich auch schon mal mit vc++ 2008, nur dort knnte ich unter
    projekteigenschaften, das ganze so einstellen, dasss es ohne dlls kompiliert wurde ( statisch/static). Und jetzt ENDLICH mein Frage: Geht das irgendwie in qt ( qt Creator) auch???? ( qt 4.5)

    Wär nett, wenn jemand ne antwort hätte...

    mfG
    X0r



  • KLingt nach debug version.

    Mingw kommt normal ohne dll's aus.



  • 1.) Darfst du nicht statisch Linken, wenn du dein Programm nicht öffentlich zur Verfügung stellst. Siehe Lizenz.
    2.) Lad dir einfach auf mingw.org die passende Runtime, also die mingw10.dll runter.
    3.) http://www.glasfaserinfo.de/board/topic,2606.html
    rya.



  • Scorcher24 schrieb:

    1.) Darfst du nicht statisch Linken, wenn du dein Programm nicht öffentlich zur Verfügung stellst. Siehe Lizenz.
    rya.

    Stimmt das so? Eigentlich steht Qt doch unter der LGPL oder der GPL und das würde ja heißen das du privat damit anstellen darfst was du willst ?



  • Fencer schrieb:

    Scorcher24 schrieb:

    1.) Darfst du nicht statisch Linken, wenn du dein Programm nicht öffentlich zur Verfügung stellst. Siehe Lizenz.
    rya.

    Stimmt das so? Eigentlich steht Qt doch unter der LGPL oder der GPL und das würde ja heißen das du privat damit anstellen darfst was du willst ?

    Nein, darf man nicht. Klar, was du in deinen 4 Wänden macht, ist Trolltech egal, aber man muss da schonmal einen Gedanken dran verschwenden. Im Prinzip isses mir auch egal, nur kommt jede Woche so nen statisch-linker daher nur weil er zu faul ist die dll mitzuliefern oder nicht weiss dass es dependency walker gibt bzw nicht weiss wie man den bedient...
    Oder keine Setup-Scripts schreiben kann.
    Aber das nur am Rande. Fakt ist aber, dass gegen eine LGPL-Bibliothek nur dynamisch gelinkt werden darf. GPL zwingt dich sogar dazu, deinen SourceCode zu veröffentlichen.
    (L)GPL ist kein Freischein.
    rya.



  • Das GPL oder LGPL das statische Linken verbietet, wäre mir auch neu. Das statische Linken ist mit MSVC verboten, weil die MS-Runtime natürlich nicht GPL-kompatibel ist. Denn sobald man statisch gegen die Runtime linkt, muß auch die Runtime unter GPL lizensiert werden. Was sehr unwahrscheinlich ist, das MS dieses zulässt.

    Also, die GPL wird sicherlich das statische Linken nicht verbieten (wäre mir auch neu). Aber da die GPL viral ist, muß man aufpassen, das man nur gegen kompatible Dateien linkt.

    Also, an den Fragesteller: die MS-Runtimes sind nicht GPL-kompatibel. Deshalb darfst du nur dynamisch linken.



  • Bulli schrieb:

    Das GPL oder LGPL das statische Linken verbietet, wäre mir auch neu.

    Ist auch nicht verboten, nur muss dann der gesamte Quelltext des Programms mit veröffentlicht werden.



  • Bulli schrieb:

    Das GPL oder LGPL das statische Linken verbietet, wäre mir auch neu. Das statische Linken ist mit MSVC verboten, weil die MS-Runtime natürlich nicht GPL-kompatibel ist. Denn sobald man statisch gegen die Runtime linkt, muß auch die Runtime unter GPL lizensiert werden. Was sehr unwahrscheinlich ist, das MS dieses zulässt.

    Also, die GPL wird sicherlich das statische Linken nicht verbieten (wäre mir auch neu). Aber da die GPL viral ist, muß man aufpassen, das man nur gegen kompatible Dateien linkt.

    Also, an den Fragesteller: die MS-Runtimes sind nicht GPL-kompatibel. Deshalb darfst du nur dynamisch linken.

    1. Verwenden Sie einen geeigneten Shared-Library-Mechanismus, um mit der Bibliothek zu linken. Ein geeigneter Mechanismus ist ein Mechanismus, der (a) zur Laufzeit ein Exemplar der Bibliothek verwendet, das sich bereits auf dem Computer des Anwenders befindet, und (b) mit einer modifizierten Version der Bibliothek, die mit der gelinkten Version schnittstellenkompatibel ist, korrekt arbeiten wird.

    Absatz 4d, 1
    http://www.gnu.de/documents/lgpl-3.0.de.html

    The app can remain closed-source as long as it dynamically links to LGPL libraries - static linking violates LGPL conditions.

    http://ubuntuforums.org/archive/index.php/t-1066632.html

    A commercial license will allow static linking where the lgpl doesn't. This
    may be an issue for some people.

    http://lwn.net/Articles/314933/
    Sorry :).
    rya.



  • JustSomeCoder schrieb:

    Bulli schrieb:

    Das GPL oder LGPL das statische Linken verbietet, wäre mir auch neu.

    Ist auch nicht verboten, nur muss dann der gesamte Quelltext des Programms mit veröffentlicht werden.

    Ja, ist ja auch logisch. Weil die GPL viral ist. Aber warum geht ihr davon aus, das der Fragesteller immer Closedsource machen will?



  • Scorcher24! Was für die Closedsource-MS-Runtime gilt, gilt natürlich auch für die Closedsource-Anwender-Programme. Richtig. Aber was hat das jetzt mit einem angeblichen Verbot zu tun? Mir ist immer noch nicht klar, wo mir als Entwickler generell verboten wird, statisch zu linken?

    Wenn die GPL generell das statische Linken untersagt, dann ist es die schlechteste Lizenz die mir untergekommen ist!
    Deine ganzen Zitate beziehen sich auf Fälle, wo jemand Closedsource entwickeln. will. X0r hat aber nichts davon gesagt. Wenn er GPL-Software entwickeln will, wird er ja wohl seine Anwendung mit Qt statisch linken dürfen, oder? Nur die MS-Runtime darf er weiterhin nicht statisch linken (außer er macht es in seinen vier Wänden).



  • @Bulli
    siehe meine erste Antwort:

    1.) Darfst du nicht statisch Linken, wenn du dein Programm nicht öffentlich zur Verfügung stellst. Siehe Lizenz.

    Mit GPL kannst du linken wie du willst, da du eh den SourceCode veröffentlichen musst.
    Mit LGPL kannst du statisch linken, wenn du den SourceCode veröffentlichst, darfst aber nur dynamisch linken, wenn du ClosedSource schreibst.
    rya.



  • Schreibe das nächste Mal besser "Darfst du nicht statisch Linken, wenn du dein Sourcecode nicht unter GPL zur Verfügung stellst. Siehe Lizenz.". Denn Programm und öffentlich impliziert das ehrlich gesagt überhaupt nicht... hatte eher verstanden, das wenn er seine Binaries nicht veröffentlicht.



  • Um mal auf die eigentliche frage zurückzukommen:

    Das problem mit der mingw10.dll tritt ja nicht nur beim statischen linken sondern grundsätzlich auf, wenn man mit mingw/gcc kompiliert. Die DLL ist wohl für irgendwelche thread exception geschichten da, soweit ich das aus dem trolltech mailinglisten herauslesen konnte.
    Entfernt man die option -mthreads aus dem makefile soll es wohl so gehen. Aber keine ahnung was das dann so für auswirkungen hat.



  • Hallo,

    die mingw10.dll musst Du mit ausliefern, da die Qt DLL's diese benötigen. Wenn Du das nicht willst, musst Du dir Qt selbst kompilieren und die mingw10.dll statisch linken lassen.

    Google weiss mehr darüber: "mingw10.dll qt link statically"

    Grüße,
    Egon



  • MasterK schrieb:

    Entfernt man die option -mthreads aus dem makefile soll es wohl so gehen.

    Aha, klingt gut, nur aus dem Debug oder Release Makefile des Projekts??? ( aus beiden?) Oder is ne Makefile im qt systemordner gemeint???



  • mal ne frage: wenn das Programm Qt Bibliotheken benützt und open source zur verfügung gestellt werden muss, was passiert mit anderen dlls die gar nicht open source zur verfügung gibt? z.b. directx?

    das ist so wie wenn ich funktionen für mein programm schreibe die nicht veröffentlich werden dürfen, das programm aber auf qt basiert?

    dann hätt ich gar nicht qt erlernen sollen?????



  • xBlackKnightx schrieb:

    mal ne frage: wenn das Programm Qt Bibliotheken benützt und open source zur verfügung gestellt werden muss, was passiert mit anderen dlls die gar nicht open source zur verfügung gibt? z.b. directx?

    das ist so wie wenn ich funktionen für mein programm schreibe die nicht veröffentlich werden dürfen, das programm aber auf qt basiert?

    dann hätt ich gar nicht qt erlernen sollen?????

    Die Lizenzen der Bibliotheken und Quelltexte, die du verwendest, müssen zueinander kompatibel sein; d.h. sie dürfen sich nicht gegenseitig verletzen.



  • Vllt. sollte mal der ein oder andere die LGPL und die GPL lesen BEVOR man darüber redet.

    Solange das was am ende rauskommt unter der GPL steht darfst du statisch linken bis du schwarz wirst.

    Wenn man meint man müsse unfreie Bibliotheken benützen (die in 90% der fälle eh nix taugen) ist man selber schuld wenn man mit Lizensen zu kämpfen hat.

    z.B. ist DirectX im vergleich zu OpenGL ein witz, aber um OpenGL benutzen zu können muss man halt wieder Programmieren können.

    Auf jeden fall darfst du ein Qt Programm Statisch linken. Das Programm muss am ende nur unter der GPL stehen.

    Die Kommerzielle Version von Qt darfst du auch Statisch linken wenn dein Programm am ende nicht unter der GPL steht, wenn dir das Geld wert ist^^



  • anonymusasdf schrieb:

    z.B. ist DirectX im vergleich zu OpenGL ein witz, aber um OpenGL benutzen zu können muss man halt wieder Programmieren können.

    Tut mir leid, aber auch wenn ich persönlich DirectX (aus reiner Programmierersicht) nicht mag ist es schon garnicht mit OpenGL vergleichbar (Alleine schon wegen den Umfang, der bei weiten nicht nur Grafik, sondern auch Eingabegeräte etc. abdeckt - und gerade in den Bereichen jenseits von Grafik vermisse ich noch einheitliche Schnittstellen jenseits von DX).


Anmelden zum Antworten