Создание dll-библиотеки, со статически подлинко-, ванными стадартными Qt-библиотеками |
Здравствуйте, гость ( Вход | Регистрация )
Создание dll-библиотеки, со статически подлинко-, ванными стадартными Qt-библиотеками |
Гость_Гость_evg123_*_* |
7.6.2010, 19:55
Сообщение
#1
|
Гости |
Вопрос простой - как убрать зависимости в проектируемой dll- библиотеке от стандартных библиотек (не хочется их таскать с собой и отдавать конечному пользователю). Пока решение не нашёл. Сделал статическую версию Qt (4.5.2), но как только выдаю, что хочу создать dll-библиотеку, то линковщик создаёт эту библиотеку с динамической компановкой со стандартными (типа QtCore.dll). Можкт кто с этим сталкивался и знает, как обойти эту проблему. Получается, что если создаю приложение - то туда всё статически динкуется, а если - dll-блилиотеку - то статически туда ничего подлинковываться не хочет.
|
|
|
Litkevich Yuriy |
10.6.2010, 9:27
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
evg123 |
11.6.2010, 9:25
Сообщение
#3
|
Студент Группа: Участник Сообщений: 24 Регистрация: 29.4.2009 Из: Минск Пользователь №: 714 Спасибо сказали: 0 раз(а) Репутация: 0 |
LIBS += D:/Qt/2009.03/qt_static/lib/libQtCore4.a ни как не пойму, зачем ты это пишешь?Во первых этого файла никогда нет при статической сборке Qt! Этот файл - интерфейс к динамической версии QtCore4.dll 1: закоментировал LIB, собрал статическую библиотеку (все другие установки - как и прежде) QT -= gui TARGET = comport TEMPLATE = lib CONFIG += staticlib release DEFINES += COMPORT_LIBRARY SOURCES += comport.cpp \ ........................................ HEADERS += comport.h \ ........................................ #LIBS += D:/Qt/2009.03/qt_static/lib/libQtCore4.a статическая библиотека собралась: ar -ru release\libcomport.a release/comport.o release/qextserialport.o release/qextserialbase.o release/win_qextserialport.o release/GlobalVars.o release/moc_qextserialport.o release/moc_qextserialbase.o release/moc_win_qextserialport.o mingw32-make[1]: Leaving directory `D:/WORKDIR/qt-creator-projects/comportdll-static' mingw32-make: Leaving directory `D:/WORKDIR/qt-creator-projects/comportdll-static' ar: creating release\libcomport.a Теперь собираю динамически: QT -= gui TARGET = comport TEMPLATE = lib CONFIG += dll release DEFINES += COMPORT_LIBRARY SOURCES += comport.cpp \ ........................................... HEADERS += comport.h \ ........................................... #LIBS += D:/Qt/2009.03/qt_static/lib/libQtCore4.a Имею: g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -static -mthreads -Wl -Wl,--out-implib,release\libcomport.a -o release\comport.dll release/comport.o release/qextserialport.o release/qextserialbase.o release/win_qextserialport.o release/GlobalVars.o release/moc_qextserialport.o release/moc_qextserialbase.o release/moc_win_qextserialport.o -L"d:\Qt\2009.03\qt_static\lib" -lQtCore -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32 release/qextserialbase.o:qextserialbase.cpp:(.text+0xe): undefined reference to `_imp___ZN7QStringaSERKS_' release/qextserialbase.o:qextserialbase.cpp:(.text+0x75): undefined reference to `_imp___ZN6QMutexD1Ev' release/qextserialbase.o:qextserialbase.cpp:(.text+0xb6): undefined reference to `_imp___ZN7QString4freeEPNS_4DataE' release/qextserialbase.o:qextserialbase.cpp:(.text+0xc8): undefined reference to `_imp___ZN9QIODeviceD2Ev'.............................................. ........................................... и ещё море таких ошибок. У меня такое впечатление, что qt в статическом варианте позволяет собрать только статическую библиотеку (предназначенную для стптической линковки). либо динамическую библиотеку со всеми еразрешёнными связями на стандартные библиотеки. По ходу была мысль: может слинковать dll вручную: запустить g++.exe со всеми требуемыми параметрами? И ещё вопрос: я считал что libQtCore4.a - это как раз статический вариант динамической библиотеки (а не интерфейс). Где же именно статическая реализация QtCore4? Или я чего-то не догоняю? |
|
|
Текстовая версия | Сейчас: 25.11.2024, 22:52 |