Link-Probleme aufgrund der Versionsnummer

Alles rund um die Programmierung mit Qt
Antworten
wurstbrot
Beiträge: 3
Registriert: 6. Juli 2005 10:57

Link-Probleme aufgrund der Versionsnummer

Beitrag 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
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
wurstbrot
Beiträge: 3
Registriert: 6. Juli 2005 10:57

Beitrag von wurstbrot »

Nein, es steht nichts drin. Dann macht er 1.0.0 leider automatisch. Version 0 ergibt Version 0.0.0.

Wurstbrot
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
wurstbrot
Beiträge: 3
Registriert: 6. Juli 2005 10:57

Beitrag 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
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
Antworten