crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Создание dll-библиотеки, со статически подлинко-
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
rellanium Дата 17.1.2012, 13:40
  Решение

    TEMPLATE = lib
    #VERSION = 0.1.0
    CONFIG += staticlib static dll qt thread
    
    CONFIG += debug_and_release
    CONFIG(debug, debug|release) {
    TARGET = "testdll"
    DESTDIR = ../../debug
    OBJECTS_DIR += ../../debug/tmp
    MOC_DIR += ../../debug/tmp
    UI_DIR += ../../debug/tmp
    }
    else {
    TARGET = "testdll"
    DESTDIR = ../../release
    OBJECTS_DIR += ../../release/tmp
    MOC_DIR += ../../release/tmp
    UI_DIR += ../../release/tmp
    }
    
    # DEFINES only needed for windows
    win32 {
    CONFIG(dll) {
    DEFINES += BUILD_DLL
    }
    }
    
    # Input
    HEADERS += qtestdll.h
    SOURCES += qtestdll.cpp
evg123 Дата 21.6.2010, 19:15
  Пока что вопрос с подлинковкой стандартной динамической библиотеки статическим путём совою собственную динамическую не разрешился. Если кто может что на эту тему подсказать - буду признателен.

Задал этот вопрос на Qtcentre.rog -- пока тоже самое -- ответов нет. Неужели это такая редкая и нетривиальная задача? http://www.qtcentre.org/threads/31844-Stat...-of-the-library
evg123 Дата 17.6.2010, 9:32
 
Цитата(Litkevich Yuriy @ 15.6.2010, 14:40) *
с этого места[/url], например...

Благодарю. Интересная инфа.
Litkevich Yuriy Дата 15.6.2010, 13:40
 
Цитата(evg123 @ 15.6.2010, 15:27) *
интерфейс через статическую библиотеку к динамической)
не через статическую, a-файл при динамической сборке весит с гулькин нос, т.е. он вовсе не является статической библиотекой.
Было тут на форуме про это, надо искать.

Цитата(evg123 @ 15.6.2010, 15:27) *
можете дать ссылочку чтобы почитать об этом деле - у меня тут пробел.
с этого места, например.
evg123 Дата 15.6.2010, 11:27
 
Цитата(Litkevich Yuriy @ 11.6.2010, 17:40) *
Цитата(evg123 @ 11.6.2010, 13:25) *
libQtCore4.a - это как раз статический вариант динамической библиотеки (а не интерфейс).
это именно интерфейс.
Когда Qt собирается статически, в имени библиотеки отсутствует мажорный номер версии (цифра 4).

П.С. ошибки уже больше походят на правду.

П.П.С. всё таки dll'ка должна собираться и при статически собранной Qt, хотя я сам так и не делал, но по интернету было подтверждение.


Пока что не получилось. Я что-то тоже встречал, что можно, но вроде как в старых версиях.
По поводу линковки (интерфейс через статическую библиотеку к динамической) - можете дать ссылочку чтобы почитать об этом деле - у меня тут пробел.
Litkevich Yuriy Дата 11.6.2010, 16:40
 
Цитата(evg123 @ 11.6.2010, 13:25) *
libQtCore4.a - это как раз статический вариант динамической библиотеки (а не интерфейс).
это именно интерфейс.
Когда Qt собирается статически, в имени библиотеки отсутствует мажорный номер версии (цифра 4).

П.С. ошибки уже больше походят на правду.

П.П.С. всё таки dll'ка должна собираться и при статически собранной Qt, хотя я сам так и не делал, но по интернету было подтверждение.
evg123 Дата 11.6.2010, 9:25
 
Цитата(Litkevich Yuriy @ 10.6.2010, 9:27) *
Цитата(evg123 @ 10.6.2010, 13:21) *
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? Или я чего-то не догоняю?








Litkevich Yuriy Дата 10.6.2010, 9:27
 
Цитата(evg123 @ 10.6.2010, 13:21) *
LIBS += D:/Qt/2009.03/qt_static/lib/libQtCore4.a
ни как не пойму, зачем ты это пишешь?
Во первых этого файла никогда нет при статической сборке Qt!
Этот файл - интерфейс к динамической версии QtCore4.dll
evg123 Дата 10.6.2010, 9:21
 
Цитата(Litkevich Yuriy @ 10.6.2010, 9:01) *
evg123, важную деталь упускаешь. TEMPLATE = lib нужно писать до зависимой фразы (т.е. до CONFIG += staticlib)

Поменял, как вы говорите строчки местами:
QT -= gui
TARGET = comport
TEMPLATE = lib
CONFIG += dll release
DEFINES += COMPORT_LIBRARY
SOURCES += comport.cpp \
.....................
HEADERS += comport.h \
qextserialport/qextserialport.h
.....................
LIBS += D:/Qt/2009.03/qt_static/lib/libQtCore4.a

не помогло. всё также не разрешена ссылка `WinMain@16'
Litkevich Yuriy Дата 10.6.2010, 9:01
  evg123, важную деталь упускаешь. TEMPLATE = lib нужно писать до зависимой фразы (т.е. до CONFIG += staticlib)
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 12.5.2024, 2:06