![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Гость_Гость_evg123_*_* |
![]()
Сообщение
#1
|
Гости ![]() |
Вопрос простой - как убрать зависимости в проектируемой dll- библиотеке от стандартных библиотек (не хочется их таскать с собой и отдавать конечному пользователю). Пока решение не нашёл. Сделал статическую версию Qt (4.5.2), но как только выдаю, что хочу создать dll-библиотеку, то линковщик создаёт эту библиотеку с динамической компановкой со стандартными (типа QtCore.dll). Можкт кто с этим сталкивался и знает, как обойти эту проблему. Получается, что если создаю приложение - то туда всё статически динкуется, а если - dll-блилиотеку - то статически туда ничего подлинковываться не хочет.
|
|
|
![]() |
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
evg123 |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 24 Регистрация: 29.4.2009 Из: Минск Пользователь №: 714 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Если я собираю статическую либу (т.е. указываю TEMPLATE = lib и не указываю CONFIG = dll) проект статической библиотеки требует:TEMPLATE = lib CONFIG = staticlib А обычной TEMPLATE = lib CONFIG = dll результаты эксперементов показали следующее: 1.1. Компилировал в мингвине, Qt-Creator-е Заранее была сделана копия QT (4.5.2) и собрана статически (qt_static) 1.2. Собирал библиотеку со следующей конфигурацией: # ------------------------------------------------- # Project created by QtCreator 2010-06-03T09:36:13 # ------------------------------------------------- CONFIG += qt staticlib release QT -= gui TARGET = comport TEMPLATE = lib DEFINES += COMPORT_LIBRARY SOURCES += comport.cpp \ qextserialport/qextserialport.cpp \ qextserialport/qextserialbase.cpp \ qextserialport/win_qextserialport.cpp \ GlobalVars.cpp HEADERS += comport.h \ qextserialport/qextserialport.h \ qextserialport/qextserialbase.h \ qextserialport/win_qextserialport.h \ GlobalVars.h \ Global.h \ ThrdSoftTerm.h LIBS += D:/Qt/2009.03/qt_static/lib/libQtCore4.a win32 { QMAKE_LFLAGS += -static-libgcc } 1.3. В параметрах запуска использовал: PATH = D:\Qt\2009.03\mingw\bin;D:\Qt\2009.03\qt_static\bin;D:\Program\Microchip\MPLAB C30\bin;D:\Xilinx\11.1\ChipScope\bin\nt64;D:\Xilinx\11.1\common\bin\nt64;D:\Xilinx\11.1\common\lib\nt64;D:\Xilinx\11.1\PlanAhead\bin;D:\Xilinx\11.1\ISE\bin\nt64;D:\Xilinx\11.1\ISE\lib\nt64;D:\Program\Microchip\MCC18\mpasm;D:\Program\Microchip\MCC18\bin;D:\Program\Delphi\Nesterov\Microchip\MCC18\mpasm;D:\Program\Delphi\Nesterov\Microchip\MCC18\bin;D:\Program\Delphi\Nesterov\Microchip\MPLAB IDE\MCC18\mpasm;D:\Program\Delphi\Nesterov\Microchip\MPLAB IDE\MCC18\bin;D:\EDK\bin\nt;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\;C:\Program Files (x86)\Borland\BDS\4.0\Bin;C:\Program Files\SolidWorks\COSMOS M;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files (x86)\P-CAD 2006 Viewer\;C:\Program Files (x86)\Borland\CaliberRM SDK 2005 R2\lib;C:\Program Files (x86)\Common Files\Autodesk Shared\;%QUARTUS_ROOTDIR%\bin;D:\Program Files\System;D:\Program Files\Altium Designer Winter 09\System;D:\Program\Delphi\Nesterov\Microchip\bin;C:\Program Files (x86)\Microchip\MPLAB C30\bin;D:\Program\Microchip\MPLAB IDE\VDI;D:\Program\Microchip\MPLAB C30\bin;C:\Program Files (x86)\Microsoft SQL Server\80\Tools\Binn\;D:\Microchip Starter Kits\PIC32 Starter Kits\MPLAB C32 Suite\bin;D:\Microchip Starter Kits\PIC32 Starter Kits\MPLAB IDE\VDI;D:\Program\Microchip\MCC18\mpasm;D:\Program\Microchip\MCC18\bin;D:\Program\Delphi\Nesterov\Microchip\MCC18\mpasm;D:\Program\Delphi\Nesterov\Microchip\MCC18\bin;D:\Program\Delphi\Nesterov\Microchip\MPLAB IDE\MCC18\mpasm;D:\Program\Delphi\Nesterov\Microchip\MPLAB IDE\MCC18\bin;c:\program files (x86)\borland\bds\4.0\MyLIB\_BPL;D:\Modeltech_xe\win32xoem;D:\Modeltech_xe_starter\win32xoem Здесь важно, что путь указан на статическую библиотеку. 1.4. Из D:\Qt\2009.03\qt_static\bin жестоко физически удалил все Qt4.dll - либы 1.5. Результат сборки: собралась библиотека libcomport.a размером 84 466 байт. Не могу сразу сказать понадобится или нет D:/Qt/2009.03/qt_static/lib/libQtCore4.a для сборки окончательного приложения. 2. Создаю динамическую библиотеку со статически скомпилированной qt: 2.1 файл конфигураций: CONFIG += qt dll release QT -= gui TARGET = comport TEMPLATE = lib DEFINES += COMPORT_LIBRARY SOURCES += comport.cpp \ qextserialport/qextserialport.cpp \ qextserialport/qextserialbase.cpp \ qextserialport/win_qextserialport.cpp \ GlobalVars.cpp HEADERS += comport.h \ qextserialport/qextserialport.h \ qextserialport/qextserialbase.h \ qextserialport/win_qextserialport.h \ GlobalVars.h \ Global.h \ ThrdSoftTerm.h LIBS += D:/Qt/2009.03/qt_static/lib/libQtCore4.a win32 { QMAKE_LFLAGS += -static-libgcc } 2.2 параметр PATH, как и прежде 2.3 результат : получил: comport.dll (размером 59 904 с ссылками на QtCore4.dll) получил: libcomport.a (размером 99 116 в отличие от 84 466 в предыдущем случае) 3. Если с такими же параметрами компилирую приложение - то оно получается чисто статическое с сылкой только на mingw10.dll (ну и на микрософтовские либы) Вопрос - может что-то не то с makespec - сейчас посмотрю |
|
|
evg123 |
![]()
Сообщение
#4
|
Студент ![]() Группа: Участник Сообщений: 24 Регистрация: 29.4.2009 Из: Минск Пользователь №: 714 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Залез в makespec:
D:\Qt\2009.03\qt_static\mkspecs\win32-g++\qmake.conf - там стоял флаг: QMAKE_LFLAGS_DLL = -shared Где - то на форуме прочёл, что нужно: QMAKE_LFLAGS_DLL = -static Установил. Создаю динамическую dll. CONFIG += qt dll release QT -= gui TARGET = comport TEMPLATE = lib DEFINES += COMPORT_LIBRARY SOURCES += comport.cpp \ qextserialport/qextserialport.cpp \ qextserialport/qextserialbase.cpp \ qextserialport/win_qextserialport.cpp \ GlobalVars.cpp HEADERS += comport.h \ qextserialport/qextserialport.h \ qextserialport/qextserialbase.h \ qextserialport/win_qextserialport.h \ GlobalVars.h \ Global.h \ ThrdSoftTerm.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" D:/Qt/2009.03/qt_static/lib/libQtCore4.a -lQtCore -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32 mingw32-make[1]: Leaving directory `D:/WORKDIR/qt-creator-projects/comportdll-static' mingw32-make: Leaving directory `D:/WORKDIR/qt-creator-projects/comportdll-static' D:/Qt/2009.03/mingw/bin/../lib/gcc/mingw32/3.4.5/../../..\libmingw32.a(main.o):main.c:(.text+0x104): undefined reference to `WinMain@16' collect2: ld returned 1 exit status mingw32-make[1]: *** [release\comport.dll] Error 1 mingw32-make: *** [release] Error 2 Завершено с кодом возврата 2. Ошибка во время сборки проекта comport Во время выполнения сборки на этапе 'Make' Т.е. не определена одна единственная ссылка на WinMain При статической сбоке имею: CONFIG += qt staticlib release QT -= gui TARGET = comport TEMPLATE = lib DEFINES += COMPORT_LIBRARY SOURCES += comport.cpp \ qextserialport/qextserialport.cpp \ qextserialport/qextserialbase.cpp \ qextserialport/win_qextserialport.cpp \ GlobalVars.cpp HEADERS += comport.h \ qextserialport/qextserialport.h \ qextserialport/qextserialbase.h \ qextserialport/win_qextserialport.h \ GlobalVars.h \ Global.h \ ThrdSoftTerm.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 Завершено с кодом возврата 0. Создаётся библиотека release\libcomport.a размером 84 466 байт |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 10:17 |