GOOGLE ADS

Freitag, 29. April 2022

Warum erhält der Bibliotheksname eine zusätzliche 0 im Namen?

Ich habe dieses winzige Qt-Projekt mit einer Projektdatei wie dieser:

TEMPLATE = lib
TARGET = record32
VERSION = 0.0.1
DEPENDPATH +=.
INCLUDEPATH +=.
CONFIG += shared
SOURCES += recorder.cpp
HEADERS += recorder.h

Wenn ich eine Bibliothek daraus kompiliere qmake && nmake, führt dies zu Dateien

record32.obj
record320.lib
record320.dll
...

Warum wird diese zusätzliche 0 zu den lib- und dll-Namen hinzugefügt?

Die generierten Makefiles scheinen es nicht anzuhängen, sondern nehmen es einfach an, Makefile.Releasedarin heißt es nur:

####### Files
SOURCES = recorder.cpp release\moc_recorder.cpp
OBJECTS = release\recorder.obj release\moc_recorder.obj
DIST =
QMAKE_TARGET = recorder
DESTDIR = release\ #avoid trailing-slash linebreak
TARGET = record320.dll
DESTDIR_TARGET = release\record320.dll

Wie kann ich das verhindern und meine Bibliotheken nach Belieben benennen?

(Beachten Sie, dass das manuelle Reparieren von makefile.release keine akzeptable Lösung ist.)


Lösung des Problems

Es stammt aus dem ersten Teil von VERSION. Das "lib" TEMPLATE fügt es hinzu.

IMO ist es eine gute Idee, es in den Bibliotheksnamen aufzunehmen, da es die berüchtigte "DLL-Hölle" vermeidet, die unter Windows passiert, wo diese Konvention nicht konsequent befolgt wird... Indem die Bibliotheksdateien so benannt werden, dass sie die Hauptversionsnummer enthalten, können Benutzer dies tun mehrere Versionen installiert haben und die Programme zur Laufzeit die richtigen Versionen verwenden. Die DLL-Version muss nicht unbedingt mit der gesamten Release-Version des Projekts übereinstimmen. Unter Linux und OSX werden die Versionen an den Dateinamen angehängt (zB librecorder.so.0.0.1)

[Wenn ich Visual C++ verwende, füge ich auch immer ein Tag hinzu, das angibt, welche Version von Visual CI verwendet wurde, da Code, der von den verschiedenen Versionen generiert wurde, ebenfalls weitgehend inkompatibel ist.]

Vielleicht können Sie die Definition von VERSION einfach weglassen, um dieses Verhalten zu deaktivieren, aber ich kann das im Moment nicht für Windows überprüfen (unter Linux, wo gemeinsam genutzte Bibliotheken immer Versionsnummern haben, wird nur Version 1.0.0 angenommen.)

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...