Seite 1 von 1

Link-Probleme aufgrund der Versionsnummer

Verfasst: 6. Juli 2005 11:39
von wurstbrot
Hallo zusammen,

ich versuche, ein größeres Projekt unter Linux zu kompilieren. Dazu habe ich mir pro-Dateien geschrieben, die mittels qmake dann kompiliert werden sollen. Das funktioniert auch soweit ganz gut. Leider werden jedoch bei Librarys (so-Dateien) Versionsnummern angehängt (libmylib.so.1.0.0 für library mylib). Beim Linken mit diesen Librarys taucht dann das Problem auf, dass g++ diese librarys nicht finden kann: z.B. sag ich "g++ ... -lmylib". Heißt die library libmylib.so klappt alles, heißt sie jedoch libmylib.so.1.0.0 (was ja der Fall ist), so findet er sie nicht.

Jetzt ist die Frage: kann man qmake irgendwie sagen, dass er gar keine Versionsnummer anhängen soll oder kann man g++ sagen, welche Versionsnummer er verwenden soll? Das umbenennen der einzelnen Libs fliegt raus, da alles nacheinander ohne Benutzereingriff geschehen soll. Softlinks sind aus technischen Gründen nicht möglich.

Würde mich über eine Lösung freuen

Wurstbrot

Verfasst: 6. Juli 2005 11:44
von FlorianBecker
VERSION = X.X.X in die pro Datei eintragen setzt eine Version, es MUSS also bereits VERSION = 1.0.0 drinn stehen, wenn du das entfernst, schreibt er keine Versionsnummern.

Verfasst: 6. Juli 2005 11:50
von wurstbrot
Nein, es steht nichts drin. Dann macht er 1.0.0 leider automatisch. Version 0 ergibt Version 0.0.0.

Wurstbrot

Verfasst: 6. Juli 2005 11:57
von FlorianBecker
Seltsame Sache das.

Vielleicht kannst du ja mal deine pro Datei posten. Denn im Manual steht drinn, wenn die nicht gesetzt ist, wird auch keiner Verison vergeben. Aber ich nehme an, dass dann der Compiler gcc unter Windows die Version automatisch setzt wie unter Windows. Man müsste den Flag -avoid-version mit aufnehmen, damit keiner Versionierung erfolgt.

Ein anderes Thema ist, dass er normalerweise die Version selbst erkennt und gegen die richtige Datei linkt, wenn nach dem erstellen der Lib erneut qmake für das App ausgeführt wurde.

Verfasst: 6. Juli 2005 11:58
von Christian81
Schon mal nach /lib oder /usr/lib geschaut? Dort ist des Rätsels Lösung. ldconfig ertstellt für jede lib links damit der Linker und andere es korrekt finden können.
z.B. wird für libqt-mt.so.3.3.3 in Link namens libqt-mt.so.3.3, libqt-mt.so.3 und libqt-mt.so erzeugt. So muss es für deine lib auch passieren (entweder per Hand oder ldconfig)

Verfasst: 6. Juli 2005 11:58
von FlorianBecker
Ok, sorry, ich habe nicht wirklich aufgepasst. Dachte gcc und Win, ist aber gcc und Linux. Also -avoid-version in die Flags ist deine Lösung.

Verfasst: 6. Juli 2005 12:09
von wurstbrot
Hm, und wie bekomm ich den Tag in die pro-Files? in die makefiles ist ja blödsinn, werden ja ständig überschrieben.

die symlinks sind nicht vorhanden, da die Dateien auf NTFS sind (via netzwerk). Ich will sie auch weniger auf linux-fs kopieren, da die entwicklung noch läuft und ich ständig kopieren dürfte.

Die pro sehen so aus (z.B.)

Code: Alles auswählen

TEMPLATE           = lib
HEADERS	       += ../bla/bla.h
SOURCES            += bla.c
win32:LIBS         += odbc32.lib
win32:LIBS         += odbccp32.lib
DEFINES            += 
TARGET             = ./../bla/Debug/bla
DESTDIR            = ./../bla/Debug
INCLUDEPATH        += ../blaHeader
CONFIG             += dll
CONFIG             += thread
CONFIG             += debug
wurstbrot

Verfasst: 6. Juli 2005 12:18
von FlorianBecker
Würde dir da ein Version Control System empfehlen.

Mh, Tag in die pro Datei:
CXXFLAGS += -avoid-version

Ich GLAUBE, das es so geht, denn in der Dokumentation steht nicht wirklich viel dazu. Aber ich weiß, dass ich das schonmal gemacht habe und es ging. Wenn es so nicht gehen sollte müßte man kurz danach googeln.