Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Racheengel от Апрель 26, 2008, 11:41



Название: Проблема линковки статической библиотеки в мингв и студии
Отправлено: Racheengel от Апрель 26, 2008, 11:41
Добрый день!
У меня вопрос по поводу сборки статической библиотеки и последующей линковки ее с приложением.
В данном проекте (приаттачен) при попытке линковки компиляторами студии и мингв появляются непонятные ошибки,
когда в config.pri указан LIB_CONFIG=staticlib.
При сборке динамической библиотеки, все работает.
При статике, мингв отказывается  импортировать символы из библиотеки, а студия просто вываливается с сообщением "команда не найдена".
Причем проблема проявляется только в винде. Под сузей 10.3 все ок.

Вот такой вывод получаю в мингв:

Код:
g++ -c -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT
-DIISTASKPANEL_SHARED -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT
_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\4.3.4.mingw\include\QtCore" -I"c:\Qt\4
.3.4.mingw\include\QtCore" -I"c:\Qt\4.3.4.mingw\include\QtGui" -I"c:\Qt\4.3.4.mi
ngw\include\QtGui" -I"c:\Qt\4.3.4.mingw\include\QtXml" -I"c:\Qt\4.3.4.mingw\incl
ude\QtXml" -I"c:\Qt\4.3.4.mingw\include" -I"..\..\include" -I"c:\Qt\4.3.4.mingw\
include\ActiveQt" -I"release" -I"release" -I"c:\Qt\4.3.4.mingw\mkspecs\win32-g++
" -o release\qrc_test.o release\qrc_test.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel
oc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows -o release\test.exe release/test.
o release/main.o release/moc_test.o release/qrc_test.o  -L"..\..\lib" -L"c:\Qt\4
.3.4.mingw\lib" -lmingw32 -lqtmain -liistaskpanel -lQtXml4 -lQtGui4 -lQtCore4
release/test.o(.text+0x16d):test.cpp: undefined reference to `_imp___ZN10iisTask
BoxC1ERK7QPixmapRK7QStringbP7QWidget'
release/test.o(.text+0x217):test.cpp: undefined reference to `_imp___ZN12iisTask
Panel9addWidgetEP7QWidget'
release/test.o(.text+0x2ed):test.cpp: undefined reference to `_imp___ZN12iisIcon
LabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x3af):test.cpp: undefined reference to `_imp___ZN10iisTask
Box12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x4bd):test.cpp: undefined reference to `_imp___ZN12iisIcon
LabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x581):test.cpp: undefined reference to `_imp___ZN10iisTask
Box12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x5cc):test.cpp: undefined reference to `_imp___ZN10iisTask
Box11groupLayoutEv'
release/test.o(.text+0x6c1):test.cpp: undefined reference to `_imp___ZN12iisIcon
LabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x782):test.cpp: undefined reference to `_imp___ZN10iisTask
Box12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x88e):test.cpp: undefined reference to `_imp___ZN12iisIcon
LabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x94f):test.cpp: undefined reference to `_imp___ZN10iisTask
Box12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x9fa):test.cpp: undefined reference to `_imp___ZN12iisIcon
Label9setColorsERK6QColorS2_S2_'
release/test.o(.text+0xa23):test.cpp: undefined reference to `_imp___ZN12iisIcon
Label11setFocusPenERK4QPen'
release/test.o(.text+0xb1d):test.cpp: undefined reference to `_imp___ZN12iisIcon
LabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0xbe1):test.cpp: undefined reference to `_imp___ZN10iisTask
Box12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0xca5):test.cpp: undefined reference to `_imp___ZN10iisTask
BoxC1ERK7QPixmapRK7QStringbP7QWidget'
release/test.o(.text+0xd4f):test.cpp: undefined reference to `_imp___ZN12iisTask
Panel9addWidgetEP7QWidget'
release/test.o(.text+0xe25):test.cpp: undefined reference to `_imp___ZN12iisIcon
LabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0xeed):test.cpp: undefined reference to `_imp___ZN10iisTask
Box12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0xfc4):test.cpp: undefined reference to `_imp___ZN12iisIcon
LabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x1085):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x1177):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x123b):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x12be):test.cpp: undefined reference to `_imp___ZN10iisTas
kBoxC1ERK7QPixmapRK7QStringbP7QWidget'
release/test.o(.text+0x1333):test.cpp: undefined reference to `_imp___ZN12iisTas
kPanel9addWidgetEP7QWidget'
release/test.o(.text+0x13cb):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x145a):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x14ee):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x1581):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x1612):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox11groupLayoutEv'
release/test.o(.text+0x16f1):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox11groupLayoutEv'
release/test.o(.text+0x180e):test.cpp: undefined reference to `_imp___ZN12iisTas
kPanel9addWidgetEP7QWidget'
release/test.o(.text+0x1848):test.cpp: undefined reference to `_imp___ZN12iisTas
kGroupC1EP7QWidgetb'
release/test.o(.text+0x1879):test.cpp: undefined reference to `_imp___ZN12iisTas
kPanel9addWidgetEP7QWidget'
release/test.o(.text+0x194f):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x1a13):test.cpp: undefined reference to `_imp___ZN12iisTas
kGroup12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x1aae):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x1b40):test.cpp: undefined reference to `_imp___ZN12iisTas
kGroup12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x1b58):test.cpp: undefined reference to `_imp___ZN12iisTas
kPanel10addStretchEi'
release/test.o(.text+0x22dd):test.cpp: undefined reference to `_imp___ZN10iisTas
kBoxC1ERK7QPixmapRK7QStringbP7QWidget'
release/test.o(.text+0x2387):test.cpp: undefined reference to `_imp___ZN12iisTas
kPanel9addWidgetEP7QWidget'
release/test.o(.text+0x245d):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x251f):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x262d):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x26f1):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x273c):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox11groupLayoutEv'
release/test.o(.text+0x2831):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x28f2):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x29fe):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x2abf):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x2b6a):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabel9setColorsERK6QColorS2_S2_'
release/test.o(.text+0x2b93):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabel11setFocusPenERK4QPen'
release/test.o(.text+0x2c8d):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x2d51):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x2e15):test.cpp: undefined reference to `_imp___ZN10iisTas
kBoxC1ERK7QPixmapRK7QStringbP7QWidget'
release/test.o(.text+0x2ebf):test.cpp: undefined reference to `_imp___ZN12iisTas
kPanel9addWidgetEP7QWidget'
release/test.o(.text+0x2f95):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x305d):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x3134):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x31f5):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x32e7):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x33ab):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x342e):test.cpp: undefined reference to `_imp___ZN10iisTas
kBoxC1ERK7QPixmapRK7QStringbP7QWidget'
release/test.o(.text+0x34a3):test.cpp: undefined reference to `_imp___ZN12iisTas
kPanel9addWidgetEP7QWidget'
release/test.o(.text+0x353b):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x35ca):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x365e):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x36f1):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x3782):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox11groupLayoutEv'
release/test.o(.text+0x3861):test.cpp: undefined reference to `_imp___ZN10iisTas
kBox11groupLayoutEv'
release/test.o(.text+0x397e):test.cpp: undefined reference to `_imp___ZN12iisTas
kPanel9addWidgetEP7QWidget'
release/test.o(.text+0x39b8):test.cpp: undefined reference to `_imp___ZN12iisTas
kGroupC1EP7QWidgetb'
release/test.o(.text+0x39e9):test.cpp: undefined reference to `_imp___ZN12iisTas
kPanel9addWidgetEP7QWidget'
release/test.o(.text+0x3abf):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x3b83):test.cpp: undefined reference to `_imp___ZN12iisTas
kGroup12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x3c1e):test.cpp: undefined reference to `_imp___ZN12iisIco
nLabelC1ERK5QIconRK7QStringP7QWidget'
release/test.o(.text+0x3cb0):test.cpp: undefined reference to `_imp___ZN12iisTas
kGroup12addIconLabelEP12iisIconLabelb'
release/test.o(.text+0x3cc8):test.cpp: undefined reference to `_imp___ZN12iisTas
kPanel10addStretchEi'
release/test.o(.text$_ZN12Ui_testClass7setupUiEP11QMainWindow[Ui_testClass::setu
pUi(QMainWindow*)]+0x342):test.cpp: undefined reference to `_imp___ZN12iisTaskPa
nelC1EP7QWidget'
collect2: ld returned 1 exit status
mingw32-make[3]: *** [release\test.exe] Error 1
mingw32-make[3]: Leaving directory `D:/Work/iis/Projects/iisTaskPanel/tests/test
'
mingw32-make[2]: *** [release] Error 2
mingw32-make[2]: Leaving directory `D:/Work/iis/Projects/iisTaskPanel/tests/test
'
mingw32-make[1]: *** [sub-test-make_default] Error 2
mingw32-make[1]: Leaving directory `D:/Work/iis/Projects/iisTaskPanel/tests'
mingw32-make: *** [sub-tests-make_default-ordered] Error 2

Qt 4.3.3 и 4.3.4 open source
Visual Studio 2005
MinGW 3.4.5
Windows XP SP2

Также есть еще одна проблема - судя по всему, некорректно работает make clean.


Название: Re: Проблема линковки статической библиотеки в мингв и студии
Отправлено: pastor от Апрель 26, 2008, 14:31
Немножко подредактировал конф файлы и iistaskpanel_global.h. Попробуй собрать сейчас.

Проверил на Qt 4.3.4, MinGW, VS2005+SP1. Под линуксом времени небыло собрать

ЗЫ: iisTaskPanel взял на http://www.qt-apps.org/content/show.php?content=79286. Под 2005 студию и Qt 4.3.4 не собралось (ни в статике не в шареде). Под мингв тоже самое.


Название: Re: Проблема линковки статической библиотеки в мингв и студии
Отправлено: Racheengel от Апрель 26, 2008, 19:05
спасибо! вроде заработало :)
а в чем причина то была? я особых различий не заметил в проектах...


Название: Re: Проблема линковки статической библиотеки в мингв и студии
Отправлено: ритт от Апрель 26, 2008, 20:29
я под мингвом заметил такое: указываем статиклиб - собирается либа, но не собирается приложение; указываем статик - всё собирается нормально

в фичах кутэ нашёл прф-ку, в которой из статика и тэмплейта получается конфиг+=статиклиб или конфиг+=статик для либы или аппа, соответственно


Название: Re: Проблема линковки статической библиотеки в мингв и студии
Отправлено: pastor от Апрель 26, 2008, 23:51
спасибо! вроде заработало :)
а в чем причина то была? я особых различий не заметил в проектах...

Нектороые макросы юзались с другого проекта ;) Думаю ты понял с какого ;)

Я просто изменил названия некоторых макросов, и перепахал профайлы согласно тем изменениям, которые я провел в нашем общем проекте в недавнее время ;)


Название: Re: Проблема линковки статической библиотеки в мингв и студии
Отправлено: pastor от Апрель 26, 2008, 23:52
я под мингвом заметил такое: указываем статиклиб - собирается либа, но не собирается приложение; указываем статик - всё собирается нормально

в фичах кутэ нашёл прф-ку, в которой из статика и тэмплейта получается конфиг+=статиклиб или конфиг+=статик для либы или аппа, соответственно

А такое поведение с какими исходниками? Racheengel из первого поста или моими из второго?


Название: Re: Проблема линковки статической библиотеки в мингв и студии
Отправлено: ритт от Апрель 27, 2008, 00:27
из первого поста. твои я, честно говоря, не заметил
но лучше всё же пользовать статик, а не статиклиб - кумэйк сам разберётся что указывать в конфиге (конечно, если темплейт указан)


Название: Re: Проблема линковки статической библиотеки в мингв и студии
Отправлено: Racheengel от Апрель 27, 2008, 01:30
спасибо! вроде заработало :)
а в чем причина то была? я особых различий не заметил в проектах...

Нектороые макросы юзались с другого проекта ;) Думаю ты понял с какого ;)

Я просто изменил названия некоторых макросов, и перепахал профайлы согласно тем изменениям, которые я провел в нашем общем проекте в недавнее время ;)

Ага, это то я понял :)
Я имел в виду - с точки зрения логики в чем разница?
По идее логика то не поменялась, просто некоторые вещи ты переименовал, и все по большому счету...


Название: Re: Проблема линковки статической библиотеки в мингв и студии
Отправлено: pastor от Апрель 27, 2008, 18:09
Ага, это то я понял :)
Я имел в виду - с точки зрения логики в чем разница?
По идее логика то не поменялась, просто некоторые вещи ты переименовал, и все по большому счету...

Разница в том что:
1. В config.pri былв строка CONFIG += $$LIB_CONFIG, это было неверно, т.к. config.pri инклудиться в профайлы приожения (test). Эта строка должна присудстваовать только в src.pro.

2. Для статической сборки ненужен экспорт (IISTASKPANEL_EXPORT). см. iistaskpanel_global.h. В этой связи был добавлен макрос QIIS_STATICLIB. см. config.pri

3. Было исправлено имя макроса с DEFINES +=  QICS_MAKEDLL на DEFINES +=  QIIS_MAKEDLL. т.к. в iistaskpanel_global.h юзался QIIS_MAKEDLL. см. src.pro

4. Остальные изменения, впринципе, роли не сыграли


Название: Re: Проблема линковки статической библиотеки в мингв и студии
Отправлено: ритт от Апрель 27, 2008, 18:41
Пастор, а вот вариант конфига, который скидывал ранее - его не видел?


Название: Re: Проблема линковки статической библиотеки в мингв и студии
Отправлено: pastor от Апрель 27, 2008, 22:12
Пастор, а вот вариант конфига, который скидывал ранее - его не видел?

Чесно сказать не видел. :)

ЗЫ: Я юзаю скажем так свой временами уже отработанный шаблон создания либ


Название: Re: Проблема линковки статической библиотеки в мингв и студии
Отправлено: OKTA от Июнь 21, 2012, 11:31
Мужики!! Помогите!!! http://www.prog.org.ru/topic_22263_0.html