En esta página

QLibrary Class

La clase QLibrary carga bibliotecas compartidas en tiempo de ejecución. Más...

Cabecera: #include <QLibrary>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Hereda: QObject

Nota: Todas las funciones de esta clase son reentrantes.

Tipos Públicos

enum LoadHint { ResolveAllSymbolsHint, ExportExternalSymbolsHint, LoadArchiveMemberHint, PreventUnloadHint, DeepBindHint }
flags LoadHints

Propiedades

Funciones públicas

QLibrary(QObject *parent = nullptr)
QLibrary(const QString &fileName, QObject *parent = nullptr)
QLibrary(const QString &fileName, const QString &version, QObject *parent = nullptr)
QLibrary(const QString &fileName, int verNum, QObject *parent = nullptr)
virtual ~QLibrary()
QString errorString() const
QString fileName() const
bool isLoaded() const
bool load()
QLibrary::LoadHints loadHints() const
QFunctionPointer resolve(const char *symbol)
void setFileName(const QString &fileName)
void setFileNameAndVersion(const QString &fileName, const QString &version)
void setFileNameAndVersion(const QString &fileName, int versionNumber)
void setLoadHints(QLibrary::LoadHints hints)
bool unload()

Miembros públicos estáticos

bool isLibrary(const QString &fileName)
QFunctionPointer resolve(const QString &fileName, const char *symbol)
QFunctionPointer resolve(const QString &fileName, const QString &version, const char *symbol)
QFunctionPointer resolve(const QString &fileName, int verNum, const char *symbol)

Descripción Detallada

Una instancia de un objeto QLibrary opera sobre un único archivo de objetos compartidos (al que llamamos "librería", pero que también se conoce como "DLL"). Una QLibrary proporciona acceso a la funcionalidad de la librería de forma independiente de la plataforma. Puedes pasar un nombre de archivo en el constructor, o establecerlo explícitamente con setFileName(). Al cargar la biblioteca, QLibrary busca en todas las ubicaciones de biblioteca específicas del sistema (por ejemplo, LD_LIBRARY_PATH en Unix), a menos que el nombre de archivo tenga una ruta absoluta.

Si el nombre del archivo es una ruta absoluta, entonces se intenta cargar esta ruta primero. Si no se puede encontrar el archivo, QLibrary intenta el nombre con diferentes prefijos de archivo específicos de la plataforma, como "lib" en Unix y Mac, y sufijos, como ".so" en Unix, ".dylib" en Mac, o ".dll" en Windows.

Si la ruta del archivo no es absoluta, QLibrary modifica el orden de búsqueda para probar primero los prefijos y sufijos específicos del sistema, seguidos de la ruta del archivo especificado.

Esto hace posible especificar bibliotecas compartidas que sólo se identifican por su nombre base (es decir, sin su sufijo), de modo que el mismo código funcionará en diferentes sistemas operativos y aún así minimizará el número de intentos para encontrar la biblioteca.

Las funciones más importantes son load() para cargar dinámicamente el archivo de la biblioteca, isLoaded() para comprobar si la carga se ha realizado correctamente y resolve() para resolver un símbolo de la biblioteca. La función resolve() implícitamente intenta cargar la biblioteca si aún no se ha cargado. Se pueden utilizar múltiples instancias de QLibrary para acceder a la misma biblioteca física. Una vez cargadas, las bibliotecas permanecen en memoria hasta que la aplicación termina. Puedes intentar descargar una librería usando unload(), pero si otras instancias de QLibrary están usando la misma librería, la llamada fallará, y la descarga sólo ocurrirá cuando cada instancia haya llamado a unload().

Un uso típico de QLibrary es resolver un símbolo exportado en una librería, y llamar a la función C que este símbolo representa. Esto se denomina "enlazado explícito" en contraste con el "enlazado implícito", que se realiza en el paso de enlazado del proceso de compilación cuando se enlaza un ejecutable con una librería.

El siguiente fragmento de código carga una biblioteca, resuelve el símbolo "mysymbol" y llama a la función si todo ha ido bien. Si algo va mal, por ejemplo, el archivo de la biblioteca no existe o el símbolo no está definido, el puntero de la función será nullptr y no será llamada.

QLibrary myLib("mylib");
typedef void (*MyPrototype)();
MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
if (myFunction)
    myFunction();

El símbolo debe exportarse como una función C desde la biblioteca para que resolve() funcione. Esto significa que la función debe estar envuelta en un bloque extern "C" si la biblioteca está compilada con un compilador C++. En Windows, esto también requiere el uso de una macro dllexport; consulte resolve() para conocer los detalles de cómo hacerlo. Para mayor comodidad, existe una función estática resolve() que puede utilizar si sólo desea llamar a una función de una biblioteca sin cargarla explícitamente antes:

typedef void (*MyPrototype)();
MyPrototype myFunction =
        (MyPrototype) QLibrary::resolve("mylib", "mysymbol");
if (myFunction)
    myFunction();

Véase también QPluginLoader.

Documentación de tipos de miembros

enum QLibrary::LoadHint
banderas QLibrary::LoadHints

Este enum describe las posibles sugerencias que se pueden utilizar para cambiar la forma en que se gestionan las bibliotecas cuando se cargan. Estos valores indican cómo se resuelven los símbolos cuando se cargan las bibliotecas, y se especifican usando la función setLoadHints().

ConstanteValorDescripción
QLibrary::ResolveAllSymbolsHint0x01Hace que todos los símbolos de una biblioteca se resuelvan cuando se carga, no sólo cuando se llama a resolve().
QLibrary::ExportExternalSymbolsHint0x02Exporta los símbolos no resueltos y externos de la biblioteca para que puedan resolverse en otras bibliotecas de carga dinámica cargadas posteriormente.
QLibrary::LoadArchiveMemberHint0x04Permite que el nombre de archivo de la biblioteca especifique un archivo de objetos concreto dentro de un archivo de almacenamiento. Si se da esta sugerencia, el nombre de archivo de la biblioteca consta de una ruta, que es una referencia a un archivo de almacenamiento, seguida de una referencia al miembro del archivo.
QLibrary::PreventUnloadHint0x08Evita que la biblioteca se descargue del espacio de direcciones si se llama a close(). Las variables estáticas de la biblioteca no se reinicializan si se llama a open() posteriormente.
QLibrary::DeepBindHint0x10Indica al enlazador que prefiera las definiciones de la biblioteca cargada a las definiciones exportadas en la aplicación de carga al resolver símbolos externos en la biblioteca cargada. Esta opción sólo está soportada en Linux.

El tipo LoadHints es un typedef para QFlags<LoadHint>. Almacena una combinación OR de valores LoadHint.

Véase también loadHints.

Documentación de Propiedades

fileName : QString

Esta propiedad contiene el nombre de archivo de la biblioteca

Se recomienda omitir el sufijo del archivo en el nombre del archivo, ya que QLibrary buscará automáticamente el archivo con el sufijo apropiado (véase isLibrary()).

Al cargar la biblioteca, QLibrary busca en todas las ubicaciones de biblioteca específicas del sistema (por ejemplo, LD_LIBRARY_PATH en Unix), a menos que el nombre del archivo tenga una ruta absoluta. Después de cargar la biblioteca correctamente, fileName() devuelve el nombre de archivo completo de la biblioteca, incluyendo la ruta completa a la biblioteca si se dio en el constructor o se pasó a setFileName().

Por ejemplo, después de cargar con éxito la biblioteca "GL" en plataformas Unix, fileName() devolverá "libGL.so". Si el nombre del archivo se pasó originalmente como "/usr/lib/libGL", fileName() devolverá "/usr/lib/libGL.so".

Funciones de acceso:

QString fileName() const
void setFileName(const QString &fileName)

loadHints : LoadHints

Dale a la función load() algunas pistas sobre cómo debe comportarse.

Puede dar algunas pistas sobre cómo se resuelven los símbolos. Normalmente, los símbolos no se resuelven en el momento de la carga, sino que se resuelven perezosamente, (es decir, cuando se llama a resolve()). Si establece loadHints en ResolveAllSymbolsHint, todos los símbolos se resolverán en tiempo de carga si la plataforma lo soporta.

Establecer ExportExternalSymbolsHint hará que los símbolos externos de la biblioteca estén disponibles para su resolución en las siguientes bibliotecas cargadas.

Si se define LoadArchiveMemberHint, el nombre del archivo se compone de dos elementos: Una ruta que es una referencia a un archivo de almacenamiento seguido por el segundo componente que es la referencia al miembro del archivo. Por ejemplo, fileName libGL.a(shr_64.o) hará referencia a la biblioteca shr_64.o en el archivo de almacenamiento libGL.a. Esto sólo se admite en la plataforma AIX.

La interpretación de las sugerencias de carga depende de la plataforma, y si las utiliza probablemente esté haciendo algunas suposiciones sobre la plataforma para la que está compilando, así que utilícelas sólo si entiende las consecuencias de las mismas.

Por defecto, ninguno de estos indicadores está activado, por lo que las bibliotecas se cargarán con una resolución de símbolos perezosa, y no exportarán símbolos externos para su resolución en otras bibliotecas cargadas dinámicamente.

Nota: Las sugerencias sólo pueden borrarse cuando este objeto no está asociado a un archivo. Las sugerencias sólo pueden añadirse una vez que se ha establecido el nombre del archivo (hints se or'ednará con las sugerencias antiguas).

Nota: Establecer esta propiedad después de que la biblioteca haya sido cargada no tiene ningún efecto y loadHints() no reflejará esos cambios.

Nota: Esta propiedad es compartida entre todas las instancias de QLibrary que hagan referencia a la misma biblioteca.

Funciones de acceso:

QLibrary::LoadHints loadHints() const
void setLoadHints(QLibrary::LoadHints hints)

Documentación de funciones miembro

[explicit] QLibrary::QLibrary(QObject *parent = nullptr)

Construye una biblioteca con la dirección parent.

[explicit] QLibrary::QLibrary(const QString &fileName, QObject *parent = nullptr)

Construye un objeto biblioteca con el parent dado que cargará la biblioteca especificada por fileName.

Recomendamos omitir el sufijo del archivo en fileName, ya que QLibrary buscará automáticamente el archivo con el sufijo apropiado según la plataforma, por ejemplo ".so" en Unix, ".dylib" en macOS e iOS, y ".dll" en Windows. (Véase fileName.)

[explicit] QLibrary::QLibrary(const QString &fileName, const QString &version, QObject *parent = nullptr)

Construye un objeto biblioteca con el valor dado parent que cargará la biblioteca especificada por fileName y el número de versión completo version. Actualmente, el número de versión se ignora en Windows.

Recomendamos omitir el sufijo del archivo en fileName, ya que QLibrary buscará automáticamente el archivo con el sufijo apropiado de acuerdo con la plataforma, por ejemplo ".so" en Unix, ".dylib" en macOS e iOS, y ".dll" en Windows. (Véase fileName.)

[explicit] QLibrary::QLibrary(const QString &fileName, int verNum, QObject *parent = nullptr)

Construye un objeto biblioteca con el valor parent que cargará la biblioteca especificada por fileName y el número de versión principal verNum. Actualmente, el número de versión se ignora en Windows.

Recomendamos omitir el sufijo del archivo en fileName, ya que QLibrary buscará automáticamente el archivo con el sufijo apropiado de acuerdo con la plataforma, por ejemplo ".so" en Unix, ".dylib" en macOS e iOS, y ".dll" en Windows. (Véase fileName.)

[virtual noexcept] QLibrary::~QLibrary()

Destruye el objeto QLibrary.

A menos que se haya llamado explícitamente a unload(), la biblioteca permanecerá en memoria hasta que finalice la aplicación.

Véase también isLoaded() y unload().

QString QLibrary::errorString() const

Devuelve una cadena de texto con la descripción del último error que se ha producido. Actualmente, errorString sólo se establecerá si load(), unload() o resolve() por alguna razón fallan.

[static] bool QLibrary::isLibrary(const QString &fileName)

Devuelve true si fileName tiene un sufijo válido para una biblioteca cargable; en caso contrario devuelve false.

PlataformaSufijos válidos
Windows.dll, .DLL
Unix/Linux.so
AIX.a
HP-UX.sl .so (HP-UXi)
macOS e iOS.dylib .bundle, .so

Los números de versión finales en Unix se ignoran.

bool QLibrary::isLoaded() const

Devuelve true si load() tuvo éxito; en caso contrario devuelve false.

Nota: Antes de Qt 6.6, esta función devolvía true incluso sin una llamada a load() si otro objeto QLibrary de la misma biblioteca había provocado su carga.

Véase también load().

bool QLibrary::load()

Carga la biblioteca y devuelve true si la biblioteca se ha cargado correctamente; en caso contrario devuelve false. Dado que resolve() siempre llama a esta función antes de resolver cualquier símbolo, no es necesario llamarla explícitamente. En algunas situaciones es posible que desee cargar la biblioteca con antelación, en cuyo caso utilizaría esta función.

Véase también unload().

QFunctionPointer QLibrary::resolve(const char *symbol)

Devuelve la dirección del símbolo exportado symbol. Si es necesario, se carga la biblioteca. La función devuelve nullptr si no se ha podido resolver el símbolo o si no se ha podido cargar la biblioteca.

Ejemplo:

typedef int (*AvgFunction)(int, int);

AvgFunction avg = (AvgFunction) library->resolve("avg");
if (avg)
    return avg(5, 8);
else
    return -1;

El símbolo debe exportarse como una función C de la biblioteca. Esto significa que la función debe estar envuelta en un extern "C" si la biblioteca se compila con un compilador C++. En Windows también debe exportar explícitamente la función desde la DLL utilizando la directiva del compilador __declspec(dllexport), por ejemplo:

extern "C" MY_EXPORT int avg(int a, int b)
{
    return (a + b) / 2;
}

con MY_EXPORT definido como

#ifdef Q_OS_WIN
#define MY_EXPORT __declspec(dllexport)
#else
#define MY_EXPORT
#endif

[static] QFunctionPointer QLibrary::resolve(const QString &fileName, const char *symbol)

Carga la biblioteca fileName y devuelve la dirección del símbolo exportado symbol. Tenga en cuenta que fileName no debe incluir el sufijo de archivo específico de la plataforma; (véase fileName). La biblioteca permanece cargada hasta que se cierra la aplicación.

La función devuelve nullptr si no se ha podido resolver el símbolo o si no se ha podido cargar la biblioteca.

Se trata de una función sobrecargada.

Véase también resolve().

[static] QFunctionPointer QLibrary::resolve(const QString &fileName, const QString &version, const char *symbol)

Carga la biblioteca fileName con el número de versión completo version y devuelve la dirección del símbolo exportado symbol. Tenga en cuenta que fileName no debe incluir el sufijo de archivo específico de la plataforma; (véase fileName). La biblioteca permanece cargada hasta que la aplicación sale. version se ignora en Windows.

La función devuelve nullptr si no se ha podido resolver el símbolo o si no se ha podido cargar la biblioteca.

Se trata de una función sobrecargada.

Véase también resolve().

[static] QFunctionPointer QLibrary::resolve(const QString &fileName, int verNum, const char *symbol)

Carga la biblioteca fileName con el número de versión principal verNum y devuelve la dirección del símbolo exportado symbol. Tenga en cuenta que fileName no debe incluir el sufijo de archivo específico de la plataforma; (véase fileName). La biblioteca permanece cargada hasta que se cierra la aplicación. verNum se ignora en Windows.

La función devuelve nullptr si no se ha podido resolver el símbolo o si no se ha podido cargar la biblioteca.

Se trata de una función sobrecargada.

Véase también resolve().

void QLibrary::setFileNameAndVersion(const QString &fileName, const QString &version)

Establece la propiedad fileName y el número de versión completa en fileName y version respectivamente. El parámetro version se ignora en Windows.

Véase también setFileName().

void QLibrary::setFileNameAndVersion(const QString &fileName, int versionNumber)

Establece la propiedad fileName y el número de versión principal en fileName y versionNumber respectivamente. versionNumber se ignora en Windows.

Véase también setFileName().

bool QLibrary::unload()

Descarga la biblioteca y devuelve true si la biblioteca pudo ser descargada; en caso contrario devuelve false.

Esto ocurre automáticamente al finalizar la aplicación, por lo que normalmente no debería ser necesario llamar a esta función.

Si otras instancias de QLibrary están utilizando la misma biblioteca, la llamada fallará, y la descarga sólo se producirá cuando todas las instancias hayan llamado a unload().

Ten en cuenta que en macOS, las bibliotecas dinámicas no pueden ser descargadas. QLibrary::unload() devolverá true, pero la biblioteca permanecerá cargada en el proceso.

Ver también resolve() y load().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.