Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qsymbolsresolveutils.cpp
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5
6#include <qdebug.h>
7#include <algorithm>
8#include <qloggingcategory.h>
9
11
12static Q_LOGGING_CATEGORY(qLcSymbolsResolver, "qt.multimedia.symbolsresolver");
13
15{
16 static const bool lazyLoad =
17 !static_cast<bool>(qEnvironmentVariableIntValue("QT_INSTANT_LOAD_FFMPEG_STUBS"));
18 return lazyLoad;
19}
20
21SymbolsResolver::SymbolsResolver(const char *libLoggingName, LibraryLoader loader)
22 : m_libLoggingName(libLoggingName)
23{
24 Q_ASSERT(libLoggingName);
25 Q_ASSERT(loader);
26
27 auto library = loader();
28 if (library && library->isLoaded())
29 m_library = std::move(library);
30 else
31 qCWarning(qLcSymbolsResolver) << "Couldn't load" << m_libLoggingName << "library";
32}
33
34SymbolsResolver::SymbolsResolver(const char *libName, const char *version,
35 const char *libLoggingName)
36 : m_libLoggingName(libLoggingName ? libLoggingName : libName)
37{
38 Q_ASSERT(libName);
39 Q_ASSERT(version);
40
41 auto library = std::make_unique<QLibrary>(QString::fromLocal8Bit(libName),
42 QString::fromLocal8Bit(version));
43 if (library->load())
44 m_library = std::move(library);
45 else
46 qCWarning(qLcSymbolsResolver) << "Couldn't load" << m_libLoggingName << "library";
47}
48
50{
51 if (m_library)
52 m_library->unload();
53}
54
55QFunctionPointer SymbolsResolver::initFunction(const char *funcName)
56{
57 if (!m_library)
58 return nullptr;
59 if (auto func = m_library->resolve(funcName))
60 return func;
61
62 qCWarning(qLcSymbolsResolver) << "Couldn't resolve" << m_libLoggingName << "symbol" << funcName;
63 m_library->unload();
64 m_library.reset();
65 return nullptr;
66}
67
69{
70 if (m_library) {
71 qCDebug(qLcSymbolsResolver) << m_libLoggingName << "symbols resolved";
72 } else {
73 const auto size = reinterpret_cast<char *>(end) - reinterpret_cast<char *>(begin);
74 memset(begin, 0, size);
75 qCWarning(qLcSymbolsResolver) << "Couldn't resolve" << m_libLoggingName << "symbols";
76 }
77}
78
static QString fromLocal8Bit(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:5951
void checkLibrariesLoaded(SymbolsMarker *begin, SymbolsMarker *end)
static bool isLazyLoadEnabled()
SymbolsResolver(const char *libLoggingName, LibraryLoader loader)
QFunctionPointer initFunction(const char *name)
std::unique_ptr< QLibrary >(*)() LibraryLoader
Combined button and popup list for selecting options.
#define Q_LOGGING_CATEGORY(name,...)
#define qCWarning(category,...)
#define qCDebug(category,...)
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint GLuint end
GLenum func
Definition qopenglext.h:663
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
Q_CORE_EXPORT int qEnvironmentVariableIntValue(const char *varName, bool *ok=nullptr) noexcept