Вам нужны три вещи:
- Вам нужно самой Qt построен как статическая библиотека:
- Вы должны сказали Qt статически связан с выполнения.
- Вам необходимо связать вашу библиотеку статически со средой выполнения. Это выполняется автоматически.
Для этого вам необходимо настроить пользовательскую Qt-сборку с аргументами -static -static-runtime
. Любая исполняемая/библиотека, которую вы создаете с использованием этой сборки Qt, будет статически связана с временем выполнения и статически связана с Qt (если он использует Qt).
Следует отметить, что ни одно из перечисленных выше не требует каких-либо изменений в файле проекта .pro
. И наоборот, вы ничего не можете сделать с вашим проектом, чтобы получить тот же эффект, вообще говоря. Вы должны получить правильно сконфигурированный Qt, и все будет обработано оттуда.
В вашей библиотеке нет необходимости использовать Qt, кроме того, что существует файл проекта, который управляет сборкой. Например, это было бы элементарную библиотека, которая не использует Qt ни C++:
TARGET = mylib
TEMPLATE = lib
CONFIG -= qt
SOURCES = mylib.c
HEADERS = mylib.h
Пока вы вызываете qmake
из Qt сконфигурированного, как описано выше, общая библиотека не будет динамически ссылка на (или Qt, но в этом случае он вообще не будет ссылаться на Qt!).
Когда я использую CONFIG + = static, он компилируется нормально, без ошибок. Но когда я использую QMAKE_LFLAGS + = -static он показывает мне эти ошибки: ошибка: не удается найти -lgnustl_shared ошибки: не удается найти -llog ошибки: не удается найти -lz ошибки: не удается найти -ldl –
Если вы хотите связать статический в библиотеку вы должны иметь статическую версию этой библиотеки. '-lgnustl_shared' звучит так же, как это общая библиотека, обычно без суффикса' _shared', компоновщик будет искать библиотеку '.a' библиотеки, но в вашем случае такой вещи нет. Фактическая библиотека - '-lgnustl_static'. Вы не получаете ошибок без этого флага, потому что без него вы вообще не связываете статически. – dtech
Повторяю, когда я использую CONFIG + = static, он компилируется нормально без ошибок. –