Показаны сообщения с ярлыком MinGW. Показать все сообщения
Показаны сообщения с ярлыком MinGW. Показать все сообщения

30 дек. 2009 г.

MinGW vs MSVC

Решил попробовать скомпилировать проект с помощью бесплатного тулкита Microsoft Visual Studio Express а именно Visual Studio 8 (2005). Тулкит "жирный" 462 mb. сама Visual Studio, и 395 mb. Windows Platform SDK (в 2005 версии не входит в состав VS, imho это правильно).
Наверное дело привычки, но студия как IDE после Code::Blocks мне не понравилась, почти без "танцев" сбилдил либы wxWidgets, сам же проект "ниасилил", в общем на Code::Blocks лично мне оказалось удобней (правда геморрой был и там, но спасло гугление на официальном форуме wxWidgets).
В общем Release теперь билдиться только с помощью компилятора MSVC. Почему? Все просто: размер бинарника собранного в MinGW - 3.3 mb, в MSVC - 2.2 mb, т.е. - 30% (или + 50% это как посмотреть). К тому же компилятор явно быстрее, это факт. Но к студии необъяснимое отвращение, почему-то интерфейс (контролы и т.п.) вызывают стойкую ассоциацию с .NET приложением, воротит и все тут.
Параллельно посмотрел Qt 4.6, чего-то не собираются некоторые экземплы, покрутил примеры, да, фреймворк по-хорошему толст, примеры некоторые впечатляют, говорят современный (обозвать ивенты и обработчики событий сигналами и слотами и присобачить слева moc прекомпилятор это нее**цо модерново, да).
Но вот я подумал о своем приложении не супер-пупер, но и не самом простом (IPC, Custom Events, Sockets, не самый хреновый GUI, кстати нативный и выглядящий как на WinAPI). Так вот аппликуха использует в среднем около 2.5-3 mb оперативной памяти, сидит в трее и расчитана на постоянное использование, размер NSIS инсталлятора менее психологической метки в 1 mb и никаких дополнительных либ, для небольших и средних проектов самое оно (хотя назвать Code::Blocks небольшим или средним язык не поворачивается и он чертовски хорош). С Qt эти показатели увеличиваются в разы. Лицензия wxWidgets опять же намного свободней. Вот и вся логика, а модерн ради модерна пусть будет для эстетов и пиарастов.
P.S. Разработка wxWidgets началась в 1992 году, Qt - в 1994, думаю костылей и там и там хватает.

27 нояб. 2009 г.

MinGW, wxString::ToLongLong() и все все все

Дано:
wxString - строка содержащая число в строковом представлении.
m_nSize - 64 битное число.
MinGW - компилятор.
wxWidgets - фреймворк.

Задача:
Конвертировать строку в число, дабы произвести некие действия.

Решение:
Открываем доки, ищем и находим следующее:

wxString::ToLongLong
bool ToLongLong(wxLongLong_t *val, int base = 10) const

Если конвертирование возможно получаем true, но вся соль в том, что в случае с MinGW во всех случаях обламываемся и получаем false, т.к. есть некоторое условие:

Compilers with C99 support and Microsoft Visual C++ version 7 and higher do support this.

Читаем и изучаем stdlib.h и внимательно справку по wxString
Получаем следующее:

m_nSize = atoll(strHeaderSize.char_str());

Проверяем результат:

wxMessageBox(wxString::Format(wxT("%lld"), m_Size));

и обламываемся, оказывается M$ имеет свой стандарт на форматирование и в MinGW

надо использовать следующее:

wxMessageBox(wxString::Format(wxT("%I64d"), m_nSize));


Да-да, стандарты существуют для того же для чего и законы.


P.S. в Symbian при переходе с 7.0s-8.1a на 8.1b тоже изменили:

BEFORE:

x.GetTInt();

AFTER:

I64INT(x);

23 сент. 2009 г.

Code::Blocks & wxWidgets

Возникла нужда пописать на венду, тащить монстра Eclipse с C++ плагинами было лениво скачал сабж. Поставил настроил, затем сабжевый же тулкит, виндовый MinGW входил в комплект Code::Blocks, стал собирать. Указал в PATH путь к бинарникам компилятора открыл консоль, начал собирать wxWidgets и хрен... "mingw32-make не является командой или пакетным файлом...". Ладно, плавали: "SET PATH=c:\Program Files\CodeBlocks\MinGW\bin" в консольной сессии, собрал 4 версии, ура.
Приложение не собирается из-за Symbian-овского GCC, оно пыталось компилить с его помощью, понятно что в эти тапочки мы не влезем но в настройках Code::Blocks есть переменные среды которые аплятся как я понял из описания при его старте. Прописал путь к MinG, рестартнул иду, те же яйца. Почесал репу, открыл консоль перешел в папку с Code::Blocks настучал: "SET PATH=c:\Program Files\CodeBlocks\MinGW\bin" и из этой же консольной сессии стартанул иду и о чудо... оно собирает мой проект! Написал батник, жизнь удалась сталбыть.