이 페이지에서

QLibrary Class

QLibrary 클래스는 런타임에 공유 라이브러리를 불러옵니다. 더 보기...

헤더: #include <QLibrary>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속: QObject

참고: 이 클래스의 모든 함수는 재진입 가능합니다.

공개 유형

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

속성

공용 함수

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()

정적 공용 멤버

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)

상세 설명

QLibrary 객체의 인스턴스는 단일 공유 객체 파일(이것을 "라이브러리"라고 부르지만, "DLL"로도 알려져 있음)을 대상으로 작동합니다. QLibrary는 플랫폼에 구애받지 않는 방식으로 라이브러리의 기능에 대한 액세스를 제공합니다. 생성자에서 파일 이름을 전달하거나, setFileName()를 사용하여 명시적으로 설정할 수 있습니다. 라이브러리를 로드할 때, 파일 이름에 절대 경로가 포함되어 있지 않은 경우 QLibrary는 모든 시스템별 라이브러리 위치(예: Unix의 LD_LIBRARY_PATH )를 검색합니다.

파일 이름이 절대 경로인 경우, 이 경로를 먼저 로드하려고 시도합니다. 파일을 찾을 수 없는 경우, QLibrary는 유닉스 및 Mac의 “lib”와 같은 플랫폼별 파일 접두사와 유닉스의 “.so”, Mac의 “.dylib”, Windows의 “.dll”과 같은 접미사를 사용하여 파일 이름을 검색합니다.

파일 경로가 절대 경로가 아닌 경우, QLibrary는 검색 순서를 수정하여 시스템별 접두사와 접미사를 먼저 시도한 다음, 지정된 파일 경로를 시도합니다.

이를 통해 기본 이름(즉, 확장자 없이)으로만 식별되는 공유 라이브러리를 지정할 수 있으므로, 동일한 코드가 서로 다른 운영 체제에서 작동하면서도 라이브러리를 찾는 시도를 최소화할 수 있습니다.

가장 중요한 함수는 라이브러리 파일을 동적으로 로드하는 ` load()` 함수, 로드가 성공했는지 확인하는 ` isLoaded()` 함수, 그리고 라이브러리의 심볼을 해결하는 ` resolve()` 함수입니다. ` resolve()` 함수는 라이브러리가 아직 로드되지 않은 경우 암묵적으로 로드를 시도합니다. 동일한 물리적 라이브러리에 접근하기 위해 여러 개의 QLibrary 인스턴스를 사용할 수 있습니다. 일단 로드된 라이브러리는 애플리케이션이 종료될 때까지 메모리에 남아 있습니다. unload()을 사용하여 라이브러리를 언로드할 수 있지만, 다른 QLibrary 인스턴스가 동일한 라이브러리를 사용하고 있는 경우 호출이 실패하며, 모든 인스턴스가 unload()을 호출한 후에야 언로드가 이루어집니다.

QLibrary의 일반적인 용도는 라이브러리에 포함된 내보낸 심볼을 해결하고, 이 심볼이 나타내는 C 함수를 호출하는 것입니다. 이를 "명시적 링크"라고 하며, 실행 파일을 라이브러리에 링크할 때 빌드 프로세스의 링크 단계에서 수행되는 "암시적 링크"와 대조됩니다.

다음 코드 조각은 라이브러리를 불러오고, “mysymbol” 심볼을 해결한 뒤, 모든 과정이 성공하면 해당 함수를 호출합니다. 라이브러리 파일이 존재하지 않거나 심볼이 정의되지 않은 경우와 같이 문제가 발생하면, 함수 포인터는 ` nullptr `가 되어 호출되지 않습니다.

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

resolve()이 정상적으로 작동하려면 해당 심볼이 라이브러리에서 C 함수로 내보내져야 합니다. 즉, 라이브러리가 C++ 컴파일러로 컴파일된 경우 해당 함수는 extern "C" 블록으로 감싸져야 합니다. Windows에서는 또한 dllexport 매크로를 사용해야 합니다. 구체적인 방법에 대한 자세한 내용은 resolve()을 참조하십시오. 편의를 위해, 라이브러리를 먼저 명시적으로 로드하지 않고 라이브러리의 함수를 호출하고 싶을 때 사용할 수 있는 정적 함수 resolve()이 있습니다:

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

QPluginLoader도 참조하십시오 .

멤버 유형 문서

enum QLibrary::LoadHint
flags QLibrary::LoadHints

이 열거형은 라이브러리가 로드될 때 처리 방식을 변경하는 데 사용할 수 있는 가능한 힌트를 설명합니다. 이 값들은 라이브러리가 로드될 때 심볼이 어떻게 해결되는지를 나타내며, ` setLoadHints()` 함수를 사용하여 지정됩니다.

상수값설명
QLibrary::ResolveAllSymbolsHint0x01라이브러리가 로드될 때(단순히 resolve()이 호출될 때가 아니라) 라이브러리의 모든 심볼이 해결되도록 합니다.
QLibrary::ExportExternalSymbolsHint0x02라이브러리의 해결되지 않은 심볼과 외부 심볼을 내보내, 나중에 동적으로 로드되는 다른 라이브러리에서 해당 심볼을 해결할 수 있도록 합니다.
QLibrary::LoadArchiveMemberHint0x04라이브러리의 파일 이름을 사용하여 아카이브 파일 내의 특정 오브젝트 파일을 지정할 수 있게 합니다. 이 힌트가 지정되면, 라이브러리의 파일 이름은 아카이브 파일을 참조하는 경로와 그 뒤에 아카이브 멤버를 참조하는 부분으로 구성됩니다.
QLibrary::PreventUnloadHint0x08close()가 호출되더라도 라이브러리가 주소 공간에서 언로드되는 것을 방지합니다. 이후에 open()이 호출되더라도 라이브러리의 정적 변수는 재초기화되지 않습니다.
QLibrary::DeepBindHint0x10링크러가 로드된 라이브러리의 외부 심볼을 해결하는 과정에서, 로드하는 애플리케이션의 내보낸 정의보다 로드된 라이브러리의 정의를 우선적으로 사용하도록 지시합니다. 이 옵션은 Linux에서만 지원됩니다.

LoadHints 유형은 QFlags<LoadHint>에 대한 typedef입니다. 이 유형은 LoadHint 값들의 OR 조합을 저장합니다.

loadHints도 참조하십시오 .

속성 설명서

fileName : QString

이 속성에는 라이브러리의 파일 이름이 저장됩니다.

QLibrary 가 적절한 확장자를 가진 파일을 자동으로 찾아주므로(자세한 내용은 isLibrary() 참조), 파일 이름에서 확장자를 생략하는 것이 좋습니다.

라이브러리를 불러올 때, 파일 이름에 절대 경로가 명시되어 있지 않은 한 QLibrary 는 모든 시스템별 라이브러리 위치(예: Unix의 경우 LD_LIBRARY_PATH )에서 파일을 검색합니다. 라이브러리를 성공적으로 불러온 후, fileName()은 생성자에서 지정되었거나 setFileName()으로 전달된 경우 라이브러리의 전체 경로를 포함하여 라이브러리의 완전한 파일 이름을 반환합니다.

예를 들어, 유닉스 플랫폼에서 "GL" 라이브러리를 성공적으로 로드한 후 fileName()은 "libGL.so"를 반환합니다. 파일 이름이 원래 "/usr/lib/libGL"로 전달된 경우, fileName()은 "/usr/lib/libGL.so"를 반환합니다.

액세스 함수:

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

loadHints : LoadHints

load() 함수가 어떻게 동작해야 하는지에 대한 힌트를 제공하십시오.

심볼이 어떻게 해결되어야 하는지에 대한 힌트를 제공할 수 있습니다. 일반적으로 심볼은 로드 시점에 해결되지 않고, 지연 해결(즉, resolve()이 호출될 때)됩니다. loadHints를 ResolveAllSymbolsHint 로 설정하면, 플랫폼이 이를 지원하는 경우 모든 심볼이 로드 시점에 해결됩니다.

ExportExternalSymbolsHint 를 설정하면 라이브러리의 외부 심볼을 이후에 로드되는 라이브러리에서 해결할 수 있게 됩니다.

LoadArchiveMemberHint 가 설정된 경우, 파일 이름은 두 부분으로 구성됩니다. 첫 번째 부분은 아카이브 파일을 참조하는 경로이고, 두 번째 부분은 아카이브 구성 요소를 참조하는 부분입니다. 예를 들어, fileName libGL.a(shr_64.o) 는 libGL.a 라는 이름의 아카이브 파일에 포함된 shr_64.o 라이브러리를 참조합니다. 이는 AIX 플랫폼에서만 지원됩니다.

로드 힌트의 해석은 플랫폼에 따라 다르며, 이를 사용할 경우 컴파일 대상 플랫폼에 대해 일정한 가정을 하고 있는 것이므로, 그 결과에 대해 충분히 이해한 경우에만 사용해야 합니다.

기본적으로 이러한 플래그 중 어느 것도 설정되어 있지 않으므로, 라이브러리는 지연 심볼 해결 방식으로 로드되며, 다른 동적으로 로드되는 라이브러리에서 해결될 수 있도록 외부 심볼을 내보내지 않습니다.

참고: 힌트는 이 객체가 파일과 연결되어 있지 않을 때만 지울 수 있습니다. 힌트는 파일 이름이 설정된 후에만 추가할 수 있습니다(hints 는 기존 힌트와 OR 연산을 수행합니다).

참고: 라이브러리가 로드된 후 이 속성을설정해도 아무런 효과가 없으며, loadHints()는 이러한 변경 사항을 반영하지 않습니다.

참고: 이 속성은 동일한 라이브러리를 참조하는 모든 QLibrary 인스턴스에서 공유됩니다.

액세스 함수:

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

멤버 함수 문서

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

지정된 ` parent`를 사용하여 라이브러리를 생성합니다.

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

지정된 ` parent `을 사용하여 ` fileName`로 지정된 라이브러리를 불러오는 라이브러리 객체를 생성합니다.

fileName 에서 파일 확장자를 생략하는 것을 권장합니다. QLibrary는 플랫폼에 따라 적절한 확장자(예: Unix의 ".so", macOS 및 iOS의 ".dylib", Windows의 ".dll")를 가진 파일을 자동으로 찾기 때문입니다. ( fileName 참조.)

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

주어진 ` parent `을 사용하여 라이브러리 객체를 생성하며, 이 객체는 ` fileName `으로 지정된 라이브러리와 전체 버전 번호 ` version`을 불러옵니다. 현재 Windows에서는 버전 번호가 무시됩니다.

fileName 에서 파일 확장자를 생략하는 것이 좋습니다. QLibrary는 플랫폼에 따라 적절한 확장자(예: Unix의 ".so", macOS 및 iOS의 ".dylib", Windows의 ".dll")를 가진 파일을 자동으로 찾기 때문입니다. ( fileName 참조.)

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

지정된 ` parent `을 사용하여 라이브러리 객체를 생성하며, 이 객체는 ` fileName `에 명시된 라이브러리와 ` verNum`의 메이저 버전 번호를 불러옵니다. 현재 Windows에서는 버전 번호가 무시됩니다.

fileName 에서 파일 확장자를 생략하는 것이 좋습니다. QLibrary는 플랫폼에 따라 적절한 확장자(예: Unix에서는 ".so", macOS 및 iOS에서는 ".dylib", Windows에서는 ".dll")를 가진 파일을 자동으로 찾기 때문입니다. ( fileName 참조.)

[virtual noexcept] QLibrary::~QLibrary()

QLibrary 객체를 파괴합니다.

unload()이 명시적으로 호출되지 않은 경우, 라이브러리는 애플리케이션이 종료될 때까지 메모리에 남아 있습니다.

isLoaded() 및 unload()도 참조하십시오 .

QString QLibrary::errorString() const

발생한 마지막 오류에 대한 설명이 포함된 텍스트 문자열을 반환합니다. 현재 errorString은 load(), unload() 또는 resolve()이 어떤 이유로든 실패한 경우에만 설정됩니다.

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

fileName 에 로드 가능한 라이브러리에 대한 유효한 접미사가 포함되어 있으면 ` true `을 반환하고, 그렇지 않으면 ` false`을 반환합니다.

플랫폼유효한 접미사
Windows.dll, .DLL
유닉스/리눅스.so
AIX.a
HP-UX.sl, .so (HP-UXi)
macOS 및 iOS.dylib, .bundle, .so

Unix에서 버전 번호의 끝자리는 무시됩니다.

bool QLibrary::isLoaded() const

load()이 성공하면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

참고: Qt 6.6이전 버전 에서는, load()을 호출하지 않았더라도 동일한 라이브러리에 있는 다른 QLibrary 객체로 인해 이 객체가 로드된 경우 이 함수는 true 를 반환했습니다.

load()도 참조하십시오 .

bool QLibrary::load()

라이브러리를 불러오고, 라이브러리가 성공적으로 불러온 경우 ` true `를 반환하며, 그렇지 않은 경우 ` false`를 반환합니다. ` resolve()`는 심볼을 해결하기 전에 항상 이 함수를 호출하므로, 이 함수를 명시적으로 호출할 필요는 없습니다. 어떤 상황에서는 라이브러리를 미리 불러오고 싶을 수 있는데, 이 경우 이 함수를 사용하면 됩니다.

unload()도 참조하십시오 .

QFunctionPointer QLibrary::resolve(const char *symbol)

내보낸 심볼 ` symbol`의 주소를 반환합니다. 필요한 경우 라이브러리가 로드됩니다. 심볼을 해결할 수 없거나 라이브러리를 로드할 수 없는 경우, 이 함수는 ` nullptr `를 반환합니다.

예시:

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

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

이 심볼은 라이브러리에서 C 함수로 내보내져야 합니다. 즉, 라이브러리가 C++ 컴파일러로 컴파일된 경우 해당 함수는 ` extern "C" `로 래핑되어야 합니다. Windows에서는 ` __declspec(dllexport) ` 컴파일러 지시어를 사용하여 DLL에서 해당 함수를 명시적으로 내보내야 합니다. 예를 들면 다음과 같습니다:

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

MY_EXPORT 는 다음과 같이 정의됩니다.

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

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

fileName 라이브러리를 불러오고, 내보낸 심볼 symbol 의 주소를 반환합니다. fileName 에는 플랫폼별 파일 확장자가 포함되어서는 안 된다는 점에 유의하십시오( fileName 참조). 이 라이브러리는 애플리케이션이 종료될 때까지 로드된 상태로 유지됩니다.

심볼을 해결할 수 없거나 라이브러리를 로드할 수 없는 경우, 이 함수는 nullptr 를 반환합니다.

이 함수는 오버로드된 함수입니다.

resolve()도 참조하십시오 .

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

전체 버전 번호가 version 인 라이브러리 fileName 를 불러오고, 내보낸 심볼 symbol 의 주소를 반환합니다. fileName 에는 플랫폼별 파일 확장자가 포함되어서는 안 된다는 점에 유의하십시오( fileName 참조). 이 라이브러리는 애플리케이션이 종료될 때까지 로드된 상태로 유지됩니다. Windows에서는 version 가 무시됩니다.

심볼을 확인할 수 없거나 라이브러리를 로드할 수 없는 경우, 이 함수는 ` nullptr `을 반환합니다.

이 함수는 오버로드된 함수입니다.

resolve()도 참조하십시오 .

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

메이저 버전 번호가 verNum 인 라이브러리 fileName 를 불러오고, 내보낸 심볼 symbol 의 주소를 반환합니다. fileName 에는 플랫폼별 파일 확장자가 포함되어서는 안 된다는 점에 유의하십시오( fileName 참조). 라이브러리는 애플리케이션이 종료될 때까지 로드된 상태로 유지됩니다. Windows에서는 verNum 가 무시됩니다.

심볼을 해결할 수 없거나 라이브러리를 로드할 수 없는 경우, 이 함수는 ` nullptr `을 반환합니다.

이 함수는 오버로드된 함수입니다.

resolve()도 참조하십시오 .

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

fileName 속성과 전체 버전 번호를 각각 fileName 및 version 로 설정합니다. Windows에서는 version 매개변수가 무시됩니다.

setFileName()도 참조하십시오 .

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

fileName 속성과 주요 버전 번호를 각각 fileName 및 versionNumber 로 설정합니다. Windows에서는 versionNumber 가 무시됩니다.

setFileName()도 참조하십시오 .

bool QLibrary::unload()

라이브러리를 언로드하고, 라이브러리를 언로드할 수 있는 경우 ` true `를 반환하며, 그렇지 않은 경우 ` false`를 반환합니다.

이는 애플리케이션 종료 시 자동으로 수행되므로, 일반적으로 이 함수를 호출할 필요는 없습니다.

QLibrary 의 다른 인스턴스가 동일한 라이브러리를 사용하고 있는 경우, 호출은 실패하며 모든 인스턴스가 unload()를 호출한 후에야 언로드가 이루어집니다.

macOS에서는 동적 라이브러리를 언로드할 수 없다는 점에 유의하십시오. QLibrary::unload()는 true 를 반환하지만, 라이브러리는 프로세스에 계속 로드된 상태로 남아 있습니다.

resolve() 및 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.