qmake setzt immer -DUNICODE

Alles rund um die Programmierung mit Qt
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

nein das was du da geschrieben hast, ist glaube ich völlig nutzlos.
Um die Lib zu linken sollte es z.b so aussehen:
LIBS += -lVersion -lUser32 -lAdvapi32
oder auch
LIBS +=-IDymmylib -Lc:\bla\bla\Dymmylib.lib
stefan-tiger
Beiträge: 49
Registriert: 28. März 2006 22:52

Beitrag von stefan-tiger »

BartSimpson hat geschrieben:nein das was du da geschrieben hast, ist glaube ich völlig nutzlos.
Um die Lib zu linken sollte es z.b so aussehen:
LIBS += -lVersion -lUser32 -lAdvapi32
oder auch
LIBS +=-IDymmylib -Lc:\bla\bla\Dymmylib.lib
Hm, deswegen hat das wohl unter Windows immer funktioniert, denn mein "Qt Assistant" sagt mir in der qmake-Referenz bei "LIBS":
For example:
unix:LIBS += -lmath -L/usr/local/lib
win32:LIBS += c:\mylibs\math.lib
Unter Linux liegt die libiowkit.so natürlich irgendwo wo sie automatisch gefunden wird.
Unter Windows wusste ich nicht wohin mit der iowkit.lib

By the way, beides bedeuted ja dynamisch linken, oder?
Kann ich mit diesen libs auch statisch linken?

Ich bin etwas durcheinander, also nochmal:
Unter Linux hab ich: libiowkit.so
Unter Windows: iowkit.lib und iowkit.dll

Ich versteh nämlich noch nicht ganz ob ich beim kompilieren dynamisch gegen die dll linken kann, oder ich zum dynamicsh linken die iowkit.lib brauch.
Und: kann man mit der iowkit.dll oder der iowkit.lib auch statisch linken?

Kann man in das qmake .pro-File vleilleciht was einbauen, damit ich später per "make release" die dynamisch gelinkte Version und mit "make static-release" die statisch gelinkte Version hab?
(natürlich unter Windows und Linux gleichermaßen, incl. der Qt4 libs jeweils dyn. bzw. stat.)
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Das ist eine Eigenart von Windows die dll ist die eigentliche Bibliothek.
Zum linken benötigt du unter Windows aber die .lib Datei.
Ob du statisch oder dynamisch links hängt unter Windows nur von der .lib Datei ab. entweder bescheibt diese eine dll.(dann dynamisch) oder die .lib Datei beinhaltet bereits die Lib. Untet Windows ist das leider nicht so einfach wie unter Unix .a=statisch .so=dynamisch.
Wenn du die IO Warior lib statisch linken willst, must du an deinem Projekt nix anders machen als wenn du dynamisch linken willst. Du must dir eine statische version der IO Warrior lib bauen. Dazu must du ja nur die VS Projektdatei der Lib öffen und sagen, das es eine statische version werden soll und diese neu übersetzten.
stefan-tiger
Beiträge: 49
Registriert: 28. März 2006 22:52

Beitrag von stefan-tiger »

Danke ich glaub ich bleib dann erstmal bei der dynamischen Variante.

Also hab ich das richtig verstanden:

1.) die beiden "iowkit.cpp" rausschmeissen
2.) den "unix:LIBS" Eintrag abändern
3.) beim Ausliefern der Software iowkit.dll und iowkit.so hinzufügen

Dazu hätt ich noch ne Frage:
Unter Windows wird ja die dll automatisch geladen wenn die im Systempfad (z.B. c:\windows\system32) liegt, oder im selben Verzeichnis wie die .exe.

Das zweitere hätte ich gern unter Linux, damit man auf einem anderen rechner nicht als root erst die libiowkit.so nach /lib oder so kopieren muss.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

du must die lib entweder "registrien" oder den LD_LIBRARY_PATH setzen.
Aber das mit dem registriene, kannst du ja mit dem RPM Paket machen.
Da man ja immer Programme als Installationspakete für das jeweilige OS ausliefern sollte.
stefan-tiger
Beiträge: 49
Registriert: 28. März 2006 22:52

Beitrag von stefan-tiger »

BartSimpson hat geschrieben:du must die lib entweder "registrien" oder den LD_LIBRARY_PATH setzen.
Aber das mit dem registriene, kannst du ja mit dem RPM Paket machen.
Da man ja immer Programme als Installationspakete für das jeweilige OS ausliefern sollte.
Das wollte ich eigentlich vermeiden. Es soll ein Prorgamm sein bei dem alles mitgeliefert wird was man nicht voraussetzen kann (Qt4 und iowkit), das man sowohl unter Windows als auch unter Linux einfach in einen Ordner packen kann und es ohne etwas am System zu verändern ausführen kann.

Wie gesagt, bei Windows ist das Problemlos möglich in dem man die .dll einfach im selben Verzeichnis hat.

Unter Linux wird die .so nicht automatisch gefunden wenn die im selben Verzeichnis liegt.
Das ist echt ärgerlich.
stefan-tiger
Beiträge: 49
Registriert: 28. März 2006 22:52

Beitrag von stefan-tiger »

BartSimpson hat geschrieben:... RPM Paket machen.
...
Das könnte Problematisch werden.

Was passiert wenn ich eine Datei in meinem RPM habe, daß eine schon vorhandene bei der Installation ersetzen will, die ältere aber inkompatibel zur neueren ist?

Das ist ja "das Gute" unter Windows, daß man eigne DLLs benutzen kann, ohne eine gleichnamige aus dem Systemverzeichnis zu überscheiben.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

das kann Linux auch. Und im gegensatz zu Windows können von einer Datei mehre Versionen paralel existieren
Antworten