GOOGLE ADS

miércoles, 13 de abril de 2022

¿Por qué el nombre de la biblioteca tiene un 0 adicional en su nombre?

Tengo este pequeño proyecto Qt con un archivo de proyecto como este:

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

Cuando compilo una biblioteca a partir de ella qmake && nmake, resulta en archivos

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

¿Por qué se agrega ese 0 adicional a los nombres de lib y dll?

Los archivos MAKE generados parecen no agregarlo, sino que simplemente lo asumen, en Makefile.Releaseél solo dice:

####### 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

¿Cómo puedo prevenirlo y nombrar mis bibliotecas como deseo?

(Tenga en cuenta que corregir manualmente el makefile.release no es una solución accesible)


Solución del problema

Viene de la primera parte de VERSION. La PLANTILLA "lib" la está agregando.

En mi opinión, es una buena idea incluirlo en el nombre de la biblioteca, ya que evita el infame "DLL Hell" que ocurre en Windows, donde esta convención no se sigue de manera consistente... Al nombrar los archivos de la biblioteca para incluir el número de versión principal, los usuarios pueden tiene varias versiones instaladas y los programas utilizarán las versiones correctas en tiempo de ejecución. No es necesario que la versión DLL sea la misma que la versión general del lanzamiento del proyecto. En Linux y OSX, las versiones se agregan al nombre del archivo (por ejemplo, librecorder.so.0.0.1)

[Si uso Visual C++, siempre agrego una etiqueta que indica qué versión de Visual CI usé, ya que el código generado por las diferentes versiones también es incompatible en gran medida].

Tal vez pueda omitir la definición de VERSIÓN para deshabilitar este comportamiento, pero no puedo verificar eso en este momento para Windows (en Linux, donde las bibliotecas compartidas siempre tienen números de versión, solo asume la versión 1.0.0).

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...