Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Raks123 от Май 15, 2012, 07:28



Название: Статическая Qt не компилирует проект
Отправлено: Raks123 от Май 15, 2012, 07:28
Проблема такая - собрал статически Qt, но вот когда с помощью статического профиля собираешь проект выводится следующие:
g++ -static -static-libgcc -Wl,-s -Wl,-subsystem,windows -o release\Diplom.exe object_script.Diplom.Release  -L"d:\Qt\4.8.1_static_fast\lib" -lmingw32 -lqtmain -lQtScript -lQtSql -lQtGui -lQtNetwork -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCore -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
d:\Qt\4.8.1_static_fast\lib\libQtScript.a(JITStubs.o):JITStubs.cpp:(.text+0x21): undefined reference to `cti_vm_throw'


Собирал с помощью qt-win-opensource-4.8.1-mingw, qt-creator-win-opensource-2.4.1, qt-everywhere-opensource-src-4.8.1, ActivePerl 5.14.2.1402

Какие измениня вносил:
edit the file Path-To-Qt-SDK\qt_static\mkspecs\win32-g++\qmake.conf and add the bold (with * ) marked stuff
QMAKE_CFLAGS_RELEASE = -Os -momit-leaf-frame-pointer
QMAKE_LFLAGS = -static -static-libgcc …
DEFINES += QT_STATIC_BUILD
edit Path-To-Qt-SDK\qt_static\qmake\Makefile.win32-g++
LFLAGS = -static -static-libgcc …
edit Path-To-Qt-SDK\qt_static\src\3rdparty\webkit\WebKit.pri
add CONFIG += staticlib on the top

убрал опцию -mthreads.

QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions

QMAKE_LFLAGS_EXCEPTIONS_ON =
QMAKE_LFLAGS_EXCEPTIONS_OFF =


Пробовал собирать два раза. Во втором случае добавил -script -scripttools в конфигурацию сборки.
SET QTDIR=D:\Qt\4.8.1_static_fast
SET MINGWDIR=D:\Qt\qtcreator-2.4.1\mingw
SET PERLDIR=D:\Perl
SET QMAKESPEC=win32-g++

chdir /D %QTDIR%

SET PATH=%QTDIR%\bin;%MINGWDIR%\bin;%SystemRoot%\System32;%PERLDIR%\site\bin;%PERLDIR%\bin
cls
echo -- MinGW Confclean --
mingw32-make confclean

echo -- MinGW Configure --
configure.exe -static -debug-and-release -opensource -confirm-license -platform win32-g++ -exceptions -dont-process -no-qt3support -qt-sql-sqlite -qt-zlib -qt-libpng -qt-libjpeg -no-phonon -no-webkit -no-phonon-backend -script -scripttools

echo -- MinGW Build --
bin\qmake.exe projects.pro QT_BUILD_PARTS="libs" JAVASCRIPTCORE_JIT="yes"
mingw32-make


Я только не давно собирал Qt статически, опыта еще в этом нет, а постоянно пересобирать по несколько часов - времени нет. Кто что посоветует по делу?


Название: Re: Статическая Qt не компилирует проект
Отправлено: madRoger от Май 15, 2012, 12:25
В проект не забыл добавить QT += script ?


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Май 16, 2012, 12:52
Эм, нет, программа ведь работала


Название: Re: Статическая Qt не компилирует проект
Отправлено: ctin от Май 21, 2012, 15:53
Получилось решить проблему?


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Май 21, 2012, 18:40
Нет)))


Название: Re: Статическая Qt не компилирует проект
Отправлено: ctin от Май 21, 2012, 19:04
Я частично решил проблему заменив QML на QStateMachine и QGraphicsView


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Май 21, 2012, 19:09
а можно поподробней?


Название: Re: Статическая Qt не компилирует проект
Отправлено: ctin от Май 21, 2012, 21:41
Конечно.
Я нашел несколько способов реализовывать анимацию без QML.
Первый, самый приятный - через state machine. Для подробностей смотреть пример States.
Второй - связка Q_PROPERTY и QPropertyAnimation. К примеру надо внедрить прозрачность: переопределяем paintEvent, где рисуем картинку с учетом прозрачности (типа setBrush(QColor(50, 50, 50, m_opacity));). Регистрируем Q_PROPERTY (int m_opacity READ getOpacity WRITE setOpacity) и можно будет использовать QPropertyAnimation как здесь: http://doc.trolltech.com/4.7/qpropertyanimation.html.
Третий - через таймер и обновление картинки по таймеру. Считаю его самым геморным.
По большому счету каждый способ есть в нескольких примерах.


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Май 21, 2012, 21:52
Так то прикольно сообразил)))) Только вот у меня в программе ничего этого нету) Я пересобиру, поставлю паузу в конец, может он собирает че то криво


Название: Re: Статическая Qt не компилирует проект
Отправлено: OKTA от Июнь 20, 2012, 19:01
1. в qmake.conf добавляй только -static - на остальное забей
2. -no-exceptions Вместо -exceptions
3. Не нужен perl
4. убери все -script и -scripttools - добавь только -declarative
 и будет тебе счастье))


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Июнь 20, 2012, 21:55
А изменения в файле оставить?


Название: Re: Статическая Qt не компилирует проект
Отправлено: OKTA от Июнь 20, 2012, 21:59
возьми свежий и добавь только -static


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Июнь 20, 2012, 22:00
Ну а я хочу от мингвшного файлика избавиться))))


Название: Re: Статическая Qt не компилирует проект
Отправлено: OKTA от Июнь 20, 2012, 22:08
Избавишься, не переживай)))
вот qmake.conf:

Код:
#
# qmake configuration for win32-g++
#
# Written for MinGW
#

MAKEFILE_GENERATOR = MINGW
TEMPLATE = app
CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target precompile_header
QT += core gui
DEFINES += UNICODE QT_LARGEFILE_SUPPORT

QMAKE_COMPILER_DEFINES  += __GNUC__ WIN32

QMAKE_EXT_OBJ           = .o
QMAKE_EXT_RES           = _res.o

QMAKE_CC = gcc
QMAKE_LEX = flex
QMAKE_LEXFLAGS =
QMAKE_YACC = byacc
QMAKE_YACCFLAGS = -d
QMAKE_CFLAGS =
QMAKE_CFLAGS_DEPS = -M
QMAKE_CFLAGS_WARN_ON = -Wall
QMAKE_CFLAGS_WARN_OFF = -w
QMAKE_CFLAGS_RELEASE = -O2
QMAKE_CFLAGS_DEBUG = -g
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses

QMAKE_CXX = g++
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
QMAKE_CXXFLAGS_RTTI_ON = -frtti
QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions

QMAKE_INCDIR =
QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]

QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<

QMAKE_LINK = g++
QMAKE_LINK_C = gcc
QMAKE_LFLAGS = -static -static-libgcc
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE = -Wl,-s
QMAKE_LFLAGS_DEBUG =
QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console
QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows
QMAKE_LFLAGS_DLL        = -shared
QMAKE_LINK_OBJECT_MAX = 10
QMAKE_LINK_OBJECT_SCRIPT= object_script
QMAKE_PREFIX_STATICLIB  = lib
QMAKE_EXTENSION_STATICLIB = a


QMAKE_LIBS =
QMAKE_LIBS_CORE         = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
QMAKE_LIBS_GUI          = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32
QMAKE_LIBS_NETWORK      = -lws2_32
QMAKE_LIBS_OPENGL       = -lglu32 -lopengl32 -lgdi32 -luser32
QMAKE_LIBS_COMPAT       = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32
QMAKE_LIBS_QT_ENTRY     = -lmingw32 -lqtmain

!isEmpty(QMAKE_SH) {
    MINGW_IN_SHELL      = 1
QMAKE_DIR_SEP = /
QMAKE_QMAKE ~= s,\\\\,/,
QMAKE_COPY = cp
QMAKE_COPY_DIR = cp -r
QMAKE_MOVE = mv
QMAKE_DEL_FILE = rm
QMAKE_MKDIR = mkdir -p
QMAKE_DEL_DIR = rmdir
    QMAKE_CHK_DIR_EXISTS = test -d
} else {
QMAKE_COPY = copy /y
QMAKE_COPY_DIR = xcopy /s /q /y /i
QMAKE_MOVE = move
QMAKE_DEL_FILE = del
QMAKE_MKDIR = mkdir
QMAKE_DEL_DIR = rmdir
    QMAKE_CHK_DIR_EXISTS = if not exist
}

QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc.exe
QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic.exe
QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc.exe

QMAKE_IDL = midl
QMAKE_LIB = ar -ru
QMAKE_RC = windres
QMAKE_ZIP = zip -r -9

QMAKE_STRIP = strip
QMAKE_STRIPFLAGS_LIB += --strip-unneeded
load(qt_config)

Вот такой configure:
Код:
configure -opensource  ^
-nomake examples -nomake demos -nomake tools -release ^
-declarative -no-qt3support -no-phonon -qt-zlib -qt-libpng -qt-libjpeg ^
-no-phonon-backend -no-s60 -fast  -no-webkit  -no-exceptions  ^
-qt-sql-sqlite -openssl-linked OPENSSL_LIBS="-llibssl -llibcrypto" ^
-static -platform win32-g++

главное -static -platform win32-g++ -no-exceptions


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Июнь 20, 2012, 22:10
А версия библиотек?


Название: Re: Статическая Qt не компилирует проект
Отправлено: OKTA от Июнь 20, 2012, 22:14
4.8.2 mingw)


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Июнь 20, 2012, 22:20
Спасибо)))) А есть ссылочка чтобы статические для линуха и виндовс одновременно собрать?


Название: Re: Статическая Qt не компилирует проект
Отправлено: OKTA от Июнь 20, 2012, 22:23
Одновременно?)) это как?)


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Июнь 20, 2012, 22:25
Слушай, а как кроссплатформ то вообще в теории делается?))))


Название: Re: Статическая Qt не компилирует проект
Отправлено: OKTA от Июнь 20, 2012, 22:29
ну..ээммм)) проект один! но на каждой платформе надо отдельно компилировать! Можно конечно почитать про кросс-компиляцию, но я только одним ухом про это слышал, так что подробней ничего не скажу))


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Июнь 20, 2012, 22:30
Вот я про кросскомпиляцию имел ввиду))) Ща так то ваще времени нету этим заниматься, я ща отучился и в армию  ;D


Название: Re: Статическая Qt не компилирует проект
Отправлено: OKTA от Июнь 20, 2012, 22:33
))) ну ты даешь))


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Июнь 20, 2012, 22:35
А на линухе че как делается знашь?)) Вообще какой лучше то поставить?


Название: Re: Статическая Qt не компилирует проект
Отправлено: OKTA от Июнь 20, 2012, 22:36
да там еще проще))))) но в целом точно так же все далется)) пути только другие и все! ставь Ubuntu И радуйся жизни!


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Июнь 20, 2012, 22:41
Ну все, спасибо)))) Хз тока че армия из меня сделает, но потом эксперименты поставлю ;D


Название: Re: Статическая Qt не компилирует проект
Отправлено: OKTA от Июнь 20, 2012, 22:44
удачи  8)


Название: Re: Статическая Qt не компилирует проект
Отправлено: Raks123 от Июнь 20, 2012, 22:46
И тебе счастливо :D