Устанавливаем WxWidgets под Ubuntu 7.04 feisty

September 22nd, 2007 Begemot Posted in XXX, Программирование

Мой опыт установки, конечно не факт что правильный и полный, но выстраданный:) Говорят лучше ставить готовыми пакетами которые можно скачать с офф сайта wxWidgets, я решил компилить сам. Трафика гораздо меньше да и полезнее для общего развития. Так как в процессе меня этот незнакомый мир достал по самые нихочу, буду краток.

Компиляция wxWidgets

Качаем сорцы библиотеки, распаковываем их, ставим нужные патчи если надо. В терминале заходим в корневую папку библиотеки (/home/begemot/_work/wxWidgets-2.8.5 в моем случае), и выполняем последующие команды:

  • cd /home/begemot/_work/wxWidgets-2.8.5 
  • mkdir gtk-build
  • cd gtk-build
  • mkdir debug
  • cd debug
  • ../../configure  –with-gtk –enable-unicode –disable-shared –enable-static –enable-debug

В ответ я получил ”checking for C compiler default output file name… configure: error: C compiler cannot create executables”  надо ставить пакет build-essential. (тут мне пришлось настраивать сеть, но это пропустим). Если есть сеть запускаете  Synaptic ишите и ставите этот пакет или в терминале sudo apt-get install build-essential. Если нет качаете тут – http://packages.ubuntu.com/dapper/devel/build-essential, копируете в вмваре и ставите вручную. Но без сети будет тяжело дальше.

Повторям команду конфигурирования. Получаем отсутвие пакетов GTK для разработчиков – открываем менеджер пакетов и ищем “libgtk dev”, находим libgtk2.0–dev и с радостью  ставим.

Опять же конфигурирование, у меня на этот раз сработало. Дальше make и 15 минут релакисируем. Если все ок – sudo make install (вводим пароль если просит). В некоторых туториалах написанно что make unstall можно не делать – я не делал и потерял несколько часов, пока в аську не пришел TRex

Дальше делаем релиз:

  • cd ../
  • mkdir release
  • cd release
  • ../../configure  –with-gtk –enable-unicode –disable-shared –enable-static –disable-debug  –enable-final
  • make
  • sudo make install

После make тут мне выдало – внутренняя ошибка компилятора: Segmentation fault, make clean и еще раз make – “../../include/wx/gtk/filedlg.h:67: внутренняя ошибка компилятора: Aborted”. Удалил папу Release, перегрузился, скомпилилось.

Пишем wx-config –version, если возвращает версию библиотеки значит все ок.

 Как собрать\посмотреть wxWidgets samples

Цитата из wiki:

 “Then, to test more in depth, you can look at the samples. Open the Samples folder located at wxGTK-2.8.4/gtk-build/samples (be careful : wxGTK-2.8.4/samples contains the source code, while wxGTK-2.8.4/gtk-build/samples contains the makefiles for your system. for building samples, you will want to cd into the latter, while to study the code you will want to open the former) ”

В терминале идем в /home/begemot/_work/wxWidgets-2.8.5/gtk-build/release/samples выбираем пример, заходим в его папку, пишем make ждем и запускаем.

Установка Code::Blocks

Последнии ночные билды искать на форуме Code:Blocks’a. Я качал отсюда (инструкция). Добавив в репозитарий и установив ключ, идем в менеджере пакетов ищем и ставим libcodeblocks.

Пытаемся запустить его из главного меню, если видно что пытается запуститься, но ничего не происходит  – пытаемся запустить его с консоли (найдете где он), тогда видно причину “codeblocks: error while loading shared libraries: libwx_gtk2u_aui-2.8.so.0: cannot open shared object file: No such file or directory”. В менеджере пакетов ставим недостающую либу. Моей версии этого хватило.

Попробывал открыть свой виндовый проект в кодеблоксе – он начал спрашивать про переменную wx(под виндой то она была). Это не правильно видимо, создаем новый проект – добавляем туда все нужные файлы и компилим, и вот он миг счастья – первое приложение под линукс собрано и запущенно.  При компиляции в релизе начало выдавать ошибки типа

/usr/local/include/wx-2.8/wx/hashmap.h:: In member function ‘wxLongToLongHashMap_wxImplementation_HashTable::Node** wxLongToLongHashMap_wxImplementation_HashTable::GetNodePtr(const long int&) const’:
/usr/local/include/wx-2.8/wx/hashmap.h:714: предупреждение: доступ по указателю с приведением типа нарушает правила перекрытия объектов в памяти
/usr/local/include/wx-2.8/wx/clntdata.h:: In member function ‘wxShadowObjectMethods_wxImplementation_HashTable::Node** wxShadowObjectMethods_wxImplementation_HashTable::GetNodePtr(const wxString&) const’:
………

Решилось отключением опции “что-то там по поводу всех предупреждений компилятора” в настройках проекта.

 

Какие еще были проблемы

Незнание команд линукса. Вот что вам может понадобится (кроме инета и терпения) – cd, dir, mkdir, rm – удалить файл, rm -rf удалить не пустой каталог, chmod и chown.

В процессе всех этих манипуляций  почему-то часть папок\файлов в моей папке получили владельцем рута. И я работать с ними толком не мог. Помогла команда “chown -R begemot *” в своем каталоге, подозреваю что надо ввести sudo сначало, но у меня видимо сесия рута была уже открыта.

После очередной перезагрузки при попытки логина, я получил офигенную штуку – “Серверу GDM не удалось записать  в ваш авторизационный файл нет места или домашний каталог не удалось открыть для записи…”. Нашел ответ. Перегружаем систему, жмем Еск, загружаемся в Restore mode (или как он там называется). В процессе система говорит что ошибка не может смонтировать систему, просит пароль рута. дальше пытаетесь чистить что у вас есть – я убил все дистрибутивы и *.o файлы в gtk-build/debug  gtk-build/release и смог войти. Тут выяснилось что если бы чистил корзину – проблемы бы не было , так что чистите корзины за собой господа.

Попытался добавить гиг, к винту в самой вмваре (было 4).  В интерфейсе вмваре эту возможность фиг найдешь, нашел на ixbtvmware-vdiskmanager.exe -x 5Gb F:\VMachines\Ubuntu\Ubuntu.vmdk . Но предварительно сделайте бекап! Он вам еще пригодится. Место то мы увеличили, но это только “физический” винт, логический сектор придется увеличивать в самой гостевой системе, что логично. Если загрузиться с Ubuntu live-cd то там должен быть GNOME partition editor, Система->Администрирование->GNOME Partition Editor если нету идите вы…

Дальше тыкаясь там в разные кнопки и менюшки, я запорол весь диск. ХЗ как это там получилось… Хорошо что я сделал бекап Вот еще думаю что делать то ли так жить, то ли попытатся еще раз ресайзить диск и перерасбить…

И еще одно, в процессе установки система качала ряд пакетов с инета, в целях экономии трафика в случае чего, я их забекапил на реальных винт. Лежат они в папке – /var/cache/apt/archives, читать подробнее. Прежде чем качать пакеты проверьте галочку “сохранять скачанные пакеты в кеши”, в опциях Synaptic’a.

 

Дополнительные ссылки

А пока меня этот линукс достал надолго, главное установилось, мое приложение скомпилилось и запустилось. Вообщем можно писать (хотя меня и сильно смущает размер ехе под wxWidgets). Думаю что теперь долго в линукс не полезу, покрайне мере пока не напишу хоть какую-то функциональность на винде. Но впереди еще MAC OS X (мне уже принисли XCode), а так же настройка проектов для wxWidgets.

Related:

15 Responses to “Устанавливаем WxWidgets под Ubuntu 7.04 feisty”

  1. У меня был примерно такой же опыт установки wxWidgets под GNU/Linux.

    Кстати, насчет размера экзешника скомпилированного приложения. Дело в том, что debug экзешник содержит debug symbols, из-за этого он сильно раздут (это особенность gcc). Его можно очень сильно уменьшить, пропустив через стандартную утилиту strip из gcc. Тогда размер минимального приложения должен стать не более 2 мегабайт. А в релиз варианте вроде бы размер и без strip должен быть нормальный.

  2. Про дебаг то понятно, не первый раз замужем:) Но там и релиз дофига весит. Под виндой, минимальный релиз для гцц более 2 метров, майкрософтовским компилятором около 1.3 – для моего сильно много 🙁

    Вот на днях допишу утилитку и буду думать как уменьшить, есть раздел с советами на сайте вхВиджет, может UPX говорят что это не страшно. Если получится сильно уменьшить отпишусь.

  3. А с чем связана такая забота о размере программы?

    Ну, как вариант, можно для разработки под Windows пользоваться gcc, а финальную версию собирать на VC++.

    Можно, конечно, и UPX использовать или ASPack или даже ASProtect – без включения защиты, если есть лицензия, конечно. Но использование этих утилит уменьшит экзешник только на жестком диске, в памяти он все равно в запущенном виде будет занимать больше места.

    Я вообще уже давно не смотрю на мегабайты. Мне кажется, с практической точки зрения нет разницы, 1 мегабайт весит программа или все 5. Даже если это простейшая утилита.

    Я бы вообще не стал использовать никакие UPX. Это ведь потом только тормозит запуск программы, так как при каждом запуске происходит ее распаковка.

    Если для скачивания надо уменьшить размер экзешника, можно его упаковать в архив 7z. Очень хорошо сжимает.

  4. Со спецификой – программы стартуют и умирают вместе с виндой, все время вися в памяти, должны быстро появлятся по хоткею и так же быстро исчезать, при этом это простые вспомогательные утилиты. И так некоторые жалуются что мол Таск Манагер показывает что программа есть 3-4 метра памяти что много для такой мелкой, а размер ехе там сейчас 200кб.

    Как вариант можно и для разработки пользоватся, VC++ а не только для финальной сборки:) Express конечно тоже не кофетка, но отладчик gcc заставляет забыть о всех недостатках Expressa.

    Вот, я тоже так всегда думал про UPX, что только на винте уменьшает, но замедляет старт программы и увеличивает память при выполнении и не мог понять зачем им все пользуются. На что мне сказали что я совсем далек от темы и послали читать http://wasm.ru, что вроде ничего страшного в использовании упх нету – и в памяти все равно меньше места. Вот собираюсь поэксперементировать на днях.

  5. а чем не устраивает версия из репозитария ?
    2.8.1 устанавливается через apt-get без бубна …

  6. Решил компилить сам по разным причинам.
    1. на тот момент в репозитарии не было самой последней версии (2.8.5).
    2. там трафика чуть ли не 60 метров надо было, жаба задавила:)
    3. Я скорее всего буду собирать себе кастом версию – с рядом отключенных фич, что бы уменьшить размер ехе-шника, так что версия из репозитария не пойдет.
    4. Ну и главное, это опыт, можно сказать бесценный опыт – надо же с чего-то начинать изучение линукса:)

  7. 1. а если добавить в /etc/apt/sources.list
    deb http://apt.wxwidgets.org/ fiesty-wx main
    deb-src http://apt.wxwidgets.org/ fiesty-wx main
    или лучше курить тут
    http://wiki.wxpython.org/InstallingOnUbuntuOrDebian
    2. тогда не понимаю п. 1. тк возмет завтра и выдет например версия 2.8.6 … будешь ее заново качать ? жаба не задушыт ?
    3,4. лучше собери свои пакеты
    http://wiki.wxpython.org/BuildingDebianPackages
    http://gq.net.ru/2007/03/16/building-deb-packages/
    то что ты делаешь это не debian-way )))))))))))

  8. 1. делал как написанно на сайте wxWidgets, добавлял эти репозитарии, все равно последней не было версии

    2. да вышла 2.8.6. скачал уже исходники 13 метров, под все системы сразу, жаба не душит 🙂

    3. Я не знаю что такое debian-way – я не линуксоид:) А пакеты собирать.. я вообще не понимаю что это:)

  9. Как я понял по борьбе с фрихой пакеты – это способ заставить тебя нагенерить траффика. 😉 Уж не помню что мы с явой связаное ставили, но в результате у нас появились Иксы и 3 версии питона (ну разные они были в зависимостях пакетов). Ну может еще всякой нафиг не нужной хрени по мелочи. Хорошо, что установку запустили на ночь и траффик потарифицировался бы как ночной, а иначе бы фирма 10 дней вообще бы была без интернета.

  10. фигею, у меня Дебиан – 3 ДВД софта, еще ничего (почти) не качал из инета. А по поводу твоего способа установки… Я если честно wx не пробовал собирать, но если там управление проектом при помощи GNU Autotools (а похоже на то), то вполне может быть, что в итоге установленный релиз затер установленный перед этим дебаг.

  11. ну и не следует забывать про полезные ключи компилятора
    -O0,-O1,-O2,-O3 – уровень оптимизации кода (быстрый/маленький)
    -g0,-g1,-g2,-g3 – уровень отладочной информации (символов) в скомпилированном файле (-g0 – не включать ее вообще)

  12. Спасибо учту, если доживу. Потому что сейчас я уже готов отказатся на время от кроссплатформенной разработки – уж очень незнакомый линукс\макос для меня. Пока хотя бы под винду писать научится:)

  13. […] Ссылка на пост в моем основном блоге как я ставил wxWidgets под Ubuntu […]

  14. Познавательная статейка. Немножко правда улыбнуло, то, что вы пытались компилировать исходники не установив перед этим компилятор (ну да, в Ubuntu, да и во многих других современных дистрибутивах он по умолчанию не ставится, так же как и в Винде, поскольку считается, что рядовому пользователю он нафиг не нужен). Для установки библиотек, программ и всего прочего есть менеджер пакетов, намного проще поставить галочку и нажать на кнопку. Более того, в бинарных дистрибутивах крайне не рекомендуется устанавливать что либо из исходников, только в очень исключительных случаях и если точно знаете, что делаете и не страшитесь геморроя. В данном случае видимо захотелось поизвращаться, ну, вот и результат соответствующий, ничего удивительного впринципе.

    Процесс установки wxWidgets подробно описан на официальном сайте последнего, там всего лишь нужно сделать пару раз копи-паст и понажимать на Enter. Ну, вообще ничего сложного там нету. Code::Blocks тоже устанавливается из официальных deb пакетов без всяких проблем, зачем заниматься извратом?

    Короче какая-нибудь книжки вроде Ubuntu Unleashed и Ubuntu Linux Toolbox вам в помощь. Все таки хоть какие-то элементарнейшие основы о системе знать желательно.

  15. Все это недорозумение потому как
    1. Это было первый раз когда я увидел юникс
    2. у меня было очень плохо с инетом и тянуть пакеты было напряжно.
    К тому же я думал что устанавливать из сорцов это самое круть:)