Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT] Сборка независимого EXE в Qt Creator, Сборка простого dll-независимого проекта 
:(
    Опции темы
nicestep
Дата 8.3.2010, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.11.2009
Где: Оренбург

Репутация: нет
Всего: нет



Доброго дня.

Для изучения C++ в качестве IDE для "подопытных" программ была выбрана Qt Creator. Вопрос в том, как собрать, допустим, вот такой простой проект:

Код

#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
    string uname;
    cout << "Hallo, World! What is your name?" << endl;
    cin >> uname;
    cout << "Hallo, " << uname << "! I'm glad to see you" << endl;
    return 0;
}


чтобы полученный в результате исполняемый файл не зависел от внешних библиотек? На данный момент результирующий HalloWorld.exe требует наличия рядом mingwm10.dll и libgcc_s_dw2-1.dll
PM MAIL ICQ Jabber   Вверх
Madonna
Дата 8.3.2010, 13:15 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Forbidden love...
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 22.1.2009
Где: Москва

Репутация: 3
Всего: 4



--------------------
Best regards, Madonna
PM   Вверх
SABROG
Дата 8.3.2010, 13:29 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(Madonna @ 8.3.2010,  13:15)
собрать статически
http://doc.trolltech.com/4.4/deployment-wi...g-qt-statically

Тут информация общая. Она и к MSVC применима, но там ведь нет mingwm10.dll.

После выхода MinGW 4.4.0 я не помню, чтобы появлялись полноценные факи по сборке Qt статически без зависимостей. Но если почитать на форумах и погуглить, то собрать самому можно.

Цитата

чтобы полученный в результате исполняемый файл не зависел от внешних библиотек?


Твой пример изначально к Qt никак не относится и собирается одной командой в консоли без IDE, файлов проектов или makefile'ов. Просто нужно почитать про ключи к компилятору и избавишься от зависимостей.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
nicestep
Дата 8.3.2010, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.11.2009
Где: Оренбург

Репутация: нет
Всего: нет



Цитата(SABROG @  8.3.2010,  13:29 Найти цитируемый пост)
Твой пример изначально к Qt никак не относится и собирается одной командой в консоли без IDE, файлов проектов или makefile'ов. Просто нужно почитать про ключи к компилятору и избавишься от зависимостей.


SABROG, у меня тот компилятор, который по-умолчанию идет с IDE - mingw32. Я побывал на сайте и почитал их официальную документацию (особенно внимательно разделы HOWTO и FAQ), но к сожалению ничего не нашел по моему вопросу

Гугл по моим запросам выдает не совсем то, что мне нужно. Насколько я понял, там ребята предлагают совсем избавиться от зависимостей от этих библиотек при сборке. Я же рассматриваю, допустим, вариант их простого включения в результирующий исполняемый файл (+ 11 кБ)

Кстати, для случая с libgcc_s_dw2-1.dll вроде достаточно использовать параметр -static-libgcc для GCC. Но как мне его указать для него, я не разобрался. Ведь в моем ведь случае сборка осуществляется через вызов mingw32-make

Madonna, по твоей ссылке рассказ о том, как прилинковать всю используемую библиотеку Qt к EXE. Вроде не то
PM MAIL ICQ Jabber   Вверх
SABROG
Дата 8.3.2010, 22:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(nicestep @  8.3.2010,  22:48 Найти цитируемый пост)
Я же рассматриваю, допустим, вариант их простого включения в результирующий исполняемый файл (+ 11 кБ)


Ну не получится. Уже писал об этом на другом форуме:

Цитата

в Windows 95,98,ME нет поддержки статических Thread Local Storage (TLS) обратных вызовов (callbacks) вшитых в PE. На этих операционных системах калбэки работают только с .dll через вызов главной функции dllMain с параметром DLL_PROCESS_ATTACH. Соответственно в более современных ОС семейства Windows уже не обязательно должна быть .dll. Если бы даже разработчики сделали статическую версию этой библиотеки и новая mingw собирала программы под Windows 9x, то в таких приложениях была бы утечка памяти.


То есть грубо говоря пока винда 95,98 и ME не умрут окончательно и бесповоротно разработчики MinGW не сделают статический вариант. А я почему-то думаю, что это будет не скоро. Единственным вариантом мне кажется делать разные сборки MinGW под каждое семейство Windows. Но почему-то разработчики этого не делают.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
nicestep
Дата 9.3.2010, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.11.2009
Где: Оренбург

Репутация: нет
Всего: нет



Понятно. Тогда какой компилятор (или сборку компилятора) я могу использовать в связке с Qt Creator, и на выходе получать абсолютно независимый от внешних библиотек исполняемый файл? Возможно это вообще?
PM MAIL ICQ Jabber   Вверх
SABROG
Дата 9.3.2010, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(nicestep @ 9.3.2010,  11:23)
Понятно. Тогда какой компилятор (или сборку компилятора) я могу использовать в связке с Qt Creator, и на выходе получать абсолютно независимый от внешних библиотек исполняемый файл? Возможно это вообще?

Не знаю. В чем причина неприятия зависимых библиотек .dll'ок?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
nicestep
Дата 9.3.2010, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.11.2009
Где: Оренбург

Репутация: нет
Всего: нет



SABROG, для проектов, использующих окна, потоки, какие-то интерфейсы etc - да, несомненно не против, а даже за.

Но для halloworld'а... считаю это не приемлемым. Здесь можно, и нужно, обойтись только зависимостью от win32-библиотек, которые реализуют WinAPI
PM MAIL ICQ Jabber   Вверх
cutwater
Дата 9.3.2010, 16:19 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 2
Всего: 10



Цитата(nicestep @  9.3.2010,  14:13 Найти цитируемый пост)
Но для halloworld'а... считаю это не приемлемым. Здесь можно, и нужно, обойтись только зависимостью от win32-библиотек, которые реализуют WinAPI 


Для helloworld наличие зависимостей не должно нисколько Вас беспокоить, сударь.

Цитата

достаточно использовать параметр -static-libgcc


тем более что решение проблемы уже прозвучало.

Линковщик не ориентирован на уровень hello world.

Цитата

Но для halloworld'а... считаю это не приемлемым. Здесь можно, и нужно, обойтись только зависимостью от win32-библиотек, которые реализуют WinAPI


Да в том то и дело что не нужно. Назовите хотя бы одну причину, кроме эстетической боли в ж*пе, опровергающую это утверждение.

Это сообщение отредактировал(а) cutwater - 9.3.2010, 16:27


--------------------
user posted image
PM MAIL   Вверх
nicestep
Дата 9.3.2010, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.11.2009
Где: Оренбург

Репутация: нет
Всего: нет



cutwater, с тобой уже все понятно, можно было не повторять. Спасибо


В общем, вывод: сделать сабж на текущем уровне развития компиляторов С++ НЕВОЗМОЖНО

Это сообщение отредактировал(а) nicestep - 9.3.2010, 20:31
PM MAIL ICQ Jabber   Вверх
SABROG
Дата 9.3.2010, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(nicestep @ 9.3.2010,  20:30)
cutwater, с тобой уже все понятно, можно было не повторять. Спасибо


В общем, вывод: сделать сабж на текущем уровне развития компиляторов С++ НЕВОЗМОЖНО

Всё возможно, но я не сторонник этой идеи. Если в примере "Hello, World" не используются исключения и нити, то избавляться можно безопасно.

Чтобы из сотни файлов сделать один, нормальные люди используют инсталлеры или на худой конец архивы. Поверь при разработке серьезного проекта это всё всплывет в подводных камнях очень не кстати, да и задачи будут посерьезней чем избавиться от mingwm10.dll.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
nicestep
Дата 10.3.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.11.2009
Где: Оренбург

Репутация: нет
Всего: нет



SABROG, я понимаю. Спасибо за помощь
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0811 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.