Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > gcc-4.4.0 и зависимость от libgcc_s_dw2-1.dll


Автор: andrew_121 12.8.2009, 18:56
Все мне нравится в версии 4.4.0 За исключением зависимости от libgcc_s_dw2-1.dll
При чем, у исполняемого файла нет прямой зависимости от нее. Значит она подгружается динамически.
Думал статически ее линковать, но нет, нет такой либы.

Как избежать зависимости от нее?

Автор: Любитель 12.8.2009, 19:28
Цитата("MinGW ReadMe")

Dynamic linking with libgcc_s_dw2-1.dll is necessary to throw
exceptions between different modules, such as between two DLLs or a
DLL and an EXE.  Consequently, it is the default for all languages
other than C.  To disable this dynamic linking, use -static-libgcc.
To enable this dynamic linking in C, use -shared-libgcc.

Автор: andrew_121 12.8.2009, 19:32
Любитель, Я это видел. Пробовал. То же самое. Попробую еще разок...

Автор: Любитель 12.8.2009, 19:48
А другие библиотеки у тебя не используются?

Автор: andrew_121 12.8.2009, 20:00
Любитель, 
Все верно. Зависимость остается если другие библиотеки собраны без этого аргумента.

Тогда еще вопросик.
Как бусту и Кут передать этот аргумент при сборке?

Автор: SABROG 12.8.2009, 20:18
Цитата(andrew_121 @  12.8.2009,  20:00 Найти цитируемый пост)
Как бусту и Кут передать этот аргумент при сборке? 


Вероятно через .pro файл:

Код

QMAKE_LFLAGS *= -static-libgcc


Вопрос только в том избавит ли это саму библиотеку Qt от зависимости, т.е. твою программу может и избавит, а Qt'шные dll'ки? И что в этом случае делать, как установить эту опцию глобально для любого проекта Qt?

К тому же с .pro файлом тоже косяк выходит. Необходимо этот ключ прописать строго для компилятора gcc, а не для любого линкера вообще. И как проверить версию gcc в .pro файле, чтобы не передавать этот ключ для gcc младше 4.4.0?

Автор: andrew_121 12.8.2009, 20:42
Цитата(SABROG @  12.8.2009,  20:18 Найти цитируемый пост)
И что в этом случае делать, как установить эту опцию глобально для любого проекта Qt?

В файле mkspecs/win32-g++/qmake.conf есть строка:
Код

QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc

думаю сюда и нужно прописывать.


Цитата(SABROG @  12.8.2009,  20:18 Найти цитируемый пост)
как проверить версию gcc в .pro файле, чтобы не передавать этот ключ для gcc младше 4.4.0? 

хз*
Написать скрипт, который будет запускать компилятор и парсить вывод. Это только идея. Нужно поэкспериментировать.

Автор: Любитель 12.8.2009, 21:40
Цитата(SABROG @  12.8.2009,  20:18 Найти цитируемый пост)
Необходимо этот ключ прописать строго для компилятора gcc, а не для любого линкера вообще.

http://qt.nokia.com/doc/4.5/qmake-advanced-usage.html#platform-scope-values

Насчёт версии - а отдельнох мейк спеков для 4-го gcc в Qt нет?

И ещё, если не предстоит портабельность на уровне pro-файла - вполне можно свои mkspec-и поправить (даже лучше и проще).

А Qt пересобирать надо, конечно. С этим ключём. А вообще, вариантов масса. Суровый вариант - написать враппер над g++ (и назвать его g++), вызывающий истинный g++, передавая свои команд лайн аргументы + нужный.

Насчёт буста - не знаю, надо смотреть доки, быть может ковырять jam-файлы. Скажу честно - bjam мутный (из небольшого опыта в своё время).

Автор: andrew_121 12.8.2009, 21:51
Цитата(Любитель @  12.8.2009,  21:40 Найти цитируемый пост)
Насчёт версии - а отдельнох мейк спеков для 4-го gcc в Qt нет?

Нет.

Цитата(Любитель @  12.8.2009,  21:40 Найти цитируемый пост)
Суровый вариант - написать враппер над g++

Не стоит smile 

Автор: andrew_121 13.8.2009, 09:40
В общем с Qt вопрос решен. Может кто подскажет куда прописать это для буста?

Автор: Любитель 13.8.2009, 09:50
cxxflags или linkflags (надо проверять) в опциях bjam-а: http://www.boost.org/boost-build2/doc/html/bbv2/advanced/invocation.html (смотрим там properties).

Автор: andrew_121 13.8.2009, 10:02
Любитель, Сейчас попробую.
Гы... Еще вопрос. Как заставить bjam собирать либы с расширением .a ?

Автор: Lazin 13.8.2009, 10:32
Цитата(andrew_121 @  13.8.2009,  10:02 Найти цитируемый пост)
Как заставить bjam собирать либы с расширением .a ?

под виндой? а зачем, если не секрет?

Автор: korbian 13.8.2009, 10:47
Цитата(andrew_121 @  13.8.2009,  11:02 Найти цитируемый пост)
Как заставить bjam собирать либы с расширением .a ?

кстати, и меня этот вопрос интересует.

Lazin, 
Цитата(Lazin @  13.8.2009,  11:32 Найти цитируемый пост)
а зачем, если не секрет?

к примеру, для удобства линковки бустовских библиотек, используя опции -L и -l компилятора gcc под окнами

Автор: andrew_121 13.8.2009, 11:24
korbian, он просто прикалывается

Автор: papochka 18.3.2010, 21:48
Цитата(andrew_121 @ 13.8.2009,  09:40)
В общем с Qt вопрос решен. Может кто подскажет куда прописать это для буста?

Сорри что такую тему поднял. Сам учу кьют. Подскажите, как вы от зависимости избавились? Просто я неочень хочу пересобирать Qt. 

Автор: papochka 18.3.2010, 23:28
Пришел к выводу: собрать в статике быстрее и легче будет smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)