Link-Probleme aufgrund der Versionsnummer
Link-Probleme aufgrund der Versionsnummer
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
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:
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
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.
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:
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)
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
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
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.)
wurstbrot
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-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
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.
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.