Ознакомьтесь с нашей политикой обработки персональных данных
  • ↓
  • ↑
  • ⇑
 
19:58 

Запись 260

Твою мать как же я устал, как я черт возьми устал

23:22 

Запись 259

Развертывание приложения QT под Windows NT с плагином MySQL


Пишу, чтобы не забыть. Да, меня впечатлила библиотека Qt, менеджеры компоновки божественны, сигналы-слоты это просто чудо, а QtCreator с его подстановкой кода, выравниванием, подсвечиванием - умиление. Все хорошо было, слишком хорошо. Проблемы были только на этапах установки и, самое печальное, развертывания кода

Первая проблема - я так и не смог ни разу собрать Qt из исходников. На официальном сайте лежали сырцы, к ним была приложена классная инструкция, но в них не хватало каких-то файлов, причем об этом узнавал я после минут сорока компиляции. Это откровенное свинство - не докладывать файлы, которые тянешь с официального сайта. После этого находил другие сырцы, в них те файлы были, но, как это ни печально, все равно не собрались они у меня ни разу. nmake падал непонятно из-за чего, в сети внятных ответов на эту проблему я не нашел, опустил руки и скачал бинарники с офсайта. Стыдно, винда плохо на меня действует видимо.

Вторя проблема - бинарная установка по умолчанию идет без плагинов. А мне был нужен плагин для работы с MySQL. Было бы все впорядке с сырцами - я бы указал перед компиляций, что мне нужно дополнительно собрать этот плагин, но что поделать. По крайней мере в бинарном установщике можно было указать, что мне нужны исходники всего Qt. В этих исходниках, конечно, были сырцы плагина MySQL. И вот, самое банальное - их же надо найти. У меня был Qt 4.8.1, сырцы плагина лежат в \QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql . Для того, чтобы их собрать, нужно скачать девелоперскую версию MySQL, т.е. в ней обязательно должны быть все инклуды и libmysql.lib. Положить всю эту папку лучше в корень диска, например, в С. Я положил ее в C:\MySQL. Далее, include директория: C:\MySQL\include, директория с либами - C:\MySQL\lib
Теперь можно собирать плагин MySQL я делал это по вот этой хорошей статье christopher.rasch-olsen.no/2009/04/14/qt-45-and...
там описывались решения проблем со сборкой при использовании MinGW, но у меня был компилятор от Microsoft, поэтому все получилось проще. Чтобы собрать плагин нужно открыть две консоли: одну консоль, которая идет от Visual Studio ( в ней будет запускаться nmake), вторую консоль, которая идет с QtCreator ( в ней будет запускаться Qmake). В каждый консоли нужно перейти в папку, где лежат сырцы плагина. В консоли, которая от Qt написать qmake "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MYSQL\MySQL Server\lib\opt\libmysql.lib" "CONFIG += debug release". Это подготовит make-файл плагина. После того, как все отработает, в консоли от Visual Studio надо написать nmake, это собственно начнет сборку исходников. Если все завершится успешно ( у меня обычно так и бывало, главное внимательно следить, чтобы при написании qmake пути к инклудам и либе были правильными), то в папках debug появится два нужных файл - qsqlmysqld4.dll и qsqlmysqld4.lib в папке release появятся такие же файлы, только без d на конце (первые - девелоперские, вторые для релиза). Дальше самое веселое. Из-за того, что плагин был собран руками, эти файлы никуда не перемещаются и их нужно переместить самому в нужные папки, чтобы Qt смогла их найти и слинковаться с ними при написании кода. Я так и не понял, куда точно надо положить эти файлы, поэтому кидал их везде, где только мог. В добавок к этим двум файлам нужно кидать еще два файла, которые идут от MySQL - libmysql.dll и libmysql.lib И так, я положил эти четыре файла в следующие папки: \QtSDK\Desktop\Qt\4.8.1\msvc2008\bin и \QtSDK\Desktop\Qt\4.8.1\msvc2008\lib и \QtSDK\Desktop\Qt\4.8.1\msvc2008\plugins\sqldrivers После этого для того, чтобы в программе можно было использовать эти библиотеки, в .pro файл проекта нужно добавить следующие строки CONFIG+=qt sql . После этого уже при соединении с базой указать нужный драйвер

Третья проблема - дебагер. В случае использования Visual Studio дебагер не идет по умолчанию. Странно, но даже если в ней пишешь программы и регулярно дебажишь их, нужно все равно скачать себе дебагер, например, отсюда msdn.microsoft.com/en-us/windows/hardware/gg463... (называется debugger tools for windows). Нужно запомнить папку, куда была произведена установка этого софта. После этого надо запустить QtCreator -> иструменты -> сборка и запуск -> инструментарии. Там надо найти все, что относится к MSVC, выбрать их, убедиться, что к ним не подключен дебагер (внизу окна поле отладчик). Если не подключен, то к каждому полю, относящемуся к MSVC нужно применить кнопку "Дублировать", а затем каждому появившемуся полю указать дебагер из папки, которые только что скачали (надо указывать файл cdb.exe) я это попытался показать в картинках





Но это еще не все. Нужно еще указать пути к символам. Для этого нужно не выходя из окна перейти на вкладку отладчик-> cdb и там указать произвольный путь к символам (например папку temp).



Теперь дебагер должен быть установлен. Нужно обязательно проверить это - написать простенькое приложение, поставить брейкпоинт и посмотреть, запуститься ли он. Если все хорошо, то при первом запуске он попросит указать пути к символам - можно указать ту же самую папку. К сожалению дебагер очень медленный, но лучше, чем ничего, что ни говори, но в борланде или Visual Studio намного удобнее и быстрее.


После всех этих весьма неприятных манипуляций я наконец-то смог начать писать код и наслаждаться Qt. До тех пор, пока не возникла последняя проблема

Четвертая проблема - развертывание. Это было самым большим ударом, потому что я привык своим неотягощенным мозгом думать, что это само собой разумющееся. В Visual Studio - слинковал статически и радуйся толстому экзешнику, который везде работает, просто галочку поставил. То же самое было в борланде. В Qt это было одной большой головной болью. Я начал с этой статьи doc.qt.digia.com/4.7/deployment-windows.html#st... . Естественно, хотелось все сделать просто и слинковать все статически, но вот незадача в том. что для этго нужно всю библиотеку Qt собрать из исходников с указанием того, что это надо сделать статически. А про мой опыт сборки исходников я уже написал. Поэтому пришлось делать с разделяемыми библиотеками. Для этого нужно в .pro файле проекта добавить строчку CONFIG += release, затем очистить в QtCreator проект, пересобрать полностью. После этого в папке release, где лежит проект, появится куча файлов с экзешником программы. Я эту папку скопировал в другое место, удалил из нее все, кроме экзешника и файла с его манифестом. В эту папку, где лежит экзешник, нужно положить библиотеки, от которых зависит программа. Это скорее всего будут библиотеки QtCore4.dll, QtGui.dll (обязательно, обязательно без d на конце, это очень важно) . Также я туда положил, на всякий случай, libmysql.dll Теперь очередь плагинов. Библиотеки нельзя просто положить рядом с экзешником. Надо cкопировать папку QtSDK\Desktop\Qt\4.8.1\msvc2008\plugins туда, где лежит экзешник. В этой папке обязательно должна быть библиотека qsqlmysql4.dll , которая была получена после сборки плагина. Обязательно надо удостовериться, что все библиотеки релизовской версии (без d на конце). Теперь наименее приятная часть. Рядом с экзешником нужно положить следующие библиотеки, специфичные для компилятора msvcp90.dll msvcr90.dll - они лежат в огромной папке C:\Windows\winsxs там среди тысяч папок надо найти ту, которая относится к используемой версии VisualStudio и обязательно это должны быть релизовские библиотеки. Чтобы не ошибиться, я поступал так. Скачал замечательную программу отсюда www.dependencywalker.com/ установил, запустил ее, открыл с ее помощью свой экзешник, нажал F9 и узнал точный путь, откуда берется библиотека. Попытался изобразить это на картинке (потом надо нажать F9 и программа покажет полный путь к библиотеке)



после этого на всякий случай я еще скопировал в папку с экзешником папки Microsoft.VC90.CRT и Microsoft.VC90.MFC они у меня лежали в C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86. Далее, чтобы уже совсем наверняка ничего не потерять, я положил в папку с экзешником Microsoft Visual C++ 2008 Redistributable Package (x86), которую взял отсюда www.microsoft.com/en-us/download/details.aspx?i.... Его надо развернуть на целевой машине в обязательном порядке. Конечно, нужно брать папки и файлы, соответствующие той версии студии, от которой зависит экзешник. Это не всегда наверное очевидно, поэтому можно с помощью любого хексового редактора, например WinHex, отккрыть бинарник экзешника и в нем сделать поиск по фразе "Visual" Там внимательно почитать что написано и найти упоминание о VisualStudio, обязательно будет указана используемая версия. Вот именно ее библиотеки и нужно будет пложить рядом с экзешником



Еще я положил на всякий случай библиотеки ieframe.dll и IEShims.dll потому что dependencyWalker показывал, что какой-то компонент зависит от них, но это был Warning, я сомневаюсь, что реально они нужны.
И вот после всех этих действий мне удалось добиться того, что у друга на машине все заработало. Заработало и у меня на чистой машине. Во вторник мне надо, чтобы это заработало на компе, куда мне надо это поставить и я надеюсь, что никогда в жизни не вернусь с этим людям.

Все эти трудности сильно подпортили впечатления от Qt, но я очень надеюсь, что когда-нибудь процесс развертывания станет у них таким же простым, как у Visual, я совсем отвык от такого красноглазия уже
Огромная благорадность вот этому человеку, без статьи которого я еще наверное долго бы бился головой о стену buffered.io/posts/resolving-side-by-side-config...

В довесок ко всему, еще одна проблема состоит в том, что по умолчанию QtCreator хранить файлы в кодировке ASCII - поэтому работать с кириллицей не стоит, пока это так. Лучше сразу перенастроить хранение файлов в кодировке UTF-8. Для этого надо зайти в Инструменты->Параметры->Текстовый Редактор->Поведение->Кодировака файлов = UTF8

00:59 

Запись 258

Провалил проект, молодец. Радует, что моей вины объективно не больше половины. Вдвойне обидно, что по факту он провален, но его все равно надо делать, чтобы хоть что-то сдать. Ну ладно, он был на добровольных начинаниях, я был готов к тому, что ничего мне за него не перепадет, зато я научился основам Qt и провал это тоже опыт. А чувство все равно очень паршивое, уныло от этого и от много чего еще. Я бы наверное даже напился, только работы много очень и похмелье это последнее, что сейчас надо. Одиноко и грустно.

19:13 

Запись 257

В универе я честно купил только два предмета: гидравлику и термех, они были не связаны со специальностей. И вот именно их мне теперь не хватает в рамках научной работы.

00:02 

Запись 256

Недавно решал курсовую по математике первого курса ноттингемского университета, вызвало немалую печаль она у меня. Там были комплексные числа и линейная алгебра. Заданий такой сложности у меня никогда в институте не было, а курс линейки даже не включал в себя внятные слова о собственных числах и векторах. С горем пополам, каждый день по чуть-чуть, узнав много нового о линейной алгебре и вспомнив все операции над комплексными числами, я сделал это курсовую. С одной задачей даже не спал пару дней нормально, потом озарило на кухне и доделал в троллейбусе. Даже сходил к своему лектору по математике, ей понравилась задача, одобрила решение, после этого я наконец-то успокоился, потому что до этого было уже 3 решения, все на первый взгляд правильные, но все-таки неправильные. Когда все сделал, то было приятно, что кое-чему все-таки научился в институте, да и в очередной раз убедился, что математика может быть очень красивой и невыносимо формальной, если не вкладывать в нее аналогии, геометрические интерпретации и воображение

22:05 

Запис 255

Откуда эта смертельная усталость по вечерам? Так я раньше кажется не уставал

15:05 

Запись 254

Дома теперь нет, жалко. Когда-нибудь у меня обязательно будет время и я смогу спокойно пересмотреть Еву, Врата Штайнера, NHK, Грехи Кьешана, Эврику, Харуху, Зимнюю сонату. Когда-нибудь обязательно будет время

23:18 

Запись 253

Домой хочу, дома хорошо

21:18 

Запись 252

Сегодня я приехал на воробьевы, смотрел на москву со смотровой и мне было очень грустно и плохо. Потом сел на велосипед снова и с остервенением стал крутить педали. Спустился на набережную, доехал до одного конца, включил высокие передачи и крутил изо всех сил, крутил, пока ничего, кроме усталости не чувствовал уже. Доехал до парка горькова, остановился там отдохнуть, выехал потом на ленинский. И депрессии уже не было. Еще у меня нормальное давление и пульс. Все хорошо, нужно стать выше себя старого и преодолеть все это, я буду стараться.

03:43 

Запись 251

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

19:16 

Запись 250

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

00:20 

Запись 249

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

00:43 

Запись 248

А и хрен с ним. Зато у меня есть руки-ноги-голова, бухло, а ещем матан-линупс-дохеравсего, я справлюсь, но херого, совсем, совсем =(

00:33 

Запись 247

Классно все-таки, когда понимаешь то, что знаешь. С неделю назад читал книгу по терверу и там была задача, в которой надо было вывести формулу расстояния от любой точки на основании конуса до его поверхности, т.е. высота в произвольной точки. Для цилиндра она одинаковая, а для конуса это функция от координат x,y. Вывел ее, часа за два. А теперь сидел, читал совсем другую область из тервера и внезапно понял, что если взять двойной интеграл от этой функции, то ведь получится объем конуса. Написал эти два интеграла, расставил пределы, перешел к полярным координатам, посчитал. И вот, таки да. Получилась формула из википедии. И это классно, это лучшее, что было со мной за пару недель, а может за все лето вообще. Да, это элементарно, но я же понял это, сам дошел, мой маленький шажок, но мой. Вот оно и вдохновении и эндорфины.Классно



01:49 

Записать 246

Небо позволяло глазам охватить так много звезд, сколько они только могли, ничего не препятствовало этому. Ни одно облако не заслоняло усыпанное светящимися узорами черное полотно. Ни один фонарь не пронзал его, мешая наслаждаться пришедшим из бесконечно далеких просторов вселенной светом звезд, многие из которых уже вполне возможно закончили свою жизнь к этому моменту. Луна выделяла из темноты обломки выжженного и разрушенного города. Лишенные простой формы здания преобразились в нечто более интересное и смело демонстрировали свою новую нестандартную архитектуру слепому зрителю по имени никто. Провалившиеся крыши, обрушившиеся фасады, груды бетона, из которого как тонкие руки торчали куски арматуры, спинки стульев и ножки столов. Комнаты с тремя стенами, выбитыми стеклами, поваленной мебелью, отдельные высокие коробки, совершенно не тронутых переменами домов в окружении своих преобразившихся товарищей. Вывернутая наизнанку земля со множеством глубоких ртов, в которых, при желании, можно было разглядеть выбитые зубы из кирпичей и бетона. Но, не смотря на все перемены, маленький город как будто остался самим собой и сохранил привычку крепко спать в такое время суток. Было очень тихо. Нарисованная девочка стояла на крыше уцелевшего здания, вытянув руки к небу. Ей было холодно и грустно. В ее больших преисполненных скорбью глазах плескались плохо отрисованные отблески луны и звезд, в фиолетовых волосах купался ветер, подняв одну прядь практические перпендикулярно голове, кончики пальцев этого недоразумения слегка были загнуты к земле, будто она хотела схватить кусочек неба, вырвать его из владений высоты, сжать в маленькой ладошке и пригреть у искусственного сердца. Больше с ней не осталось ничего, что походило бы на мир, в котором ей следовало быть. Она что-то шептала на лунном языке, тому, кто не мог ее услышать или понять, она не вписывалась ни в пейзаж, ни в сценарий. Ей не было места ни на бумаге, ни в памяти. Но все же она была. Девочка боялась умирать в одиночестве.
30.07.12

00:32 

Запись 245

Абсент божественная вещь и у меня не будет похмелья. Не будет, да-да, я это знаю

02:17 

Запись 244

В комнате холодно, ветер из открытого окна приводит с собой с каждым порывом все новые и новые волны одиночества и скорби. Они садятся в круг со мной в центре, будто дети, ожидающие услышать волнующую историю. Их глаза жадно горят, но мне нечего поведать им. Сначала они думают, что я тяну время, нагнетаю обстановку, затем, когда в их маленьких головках созревает понимание, что на самом деле мое молчание не является частью представления, они начинают беспокоиться. Это хорошо видно по их лицам. Улыбки медленно перетекают в озадаченность, дети меняют позы, обхватывают колени руками. Кто-то начинает раскачиваться влево-вправо. Но каждый из них еще верит в меня. Что вот сейчас я улыбнусь и из моего рта понесутся речи о дальних странах, бескрайних просторах океана, соленном воздухе и скрипе досок под ногами. К сожалению, единственное, что может сорваться с моих губ - это вздох. Проходит еще какое-то время, дети больше не ждут чуда, каждый из них понимает, что историй сегодня не будет. Но они не расходятся, вместо этого маленькие человечки только ближе придвигаются ко мне и впиваются в душу своими раздосадованными глазками, в которых плещется обида. Я обманул их всех, как будто пообещал каждому сладкий пряник и стакан молока, а вместо этого заставил мести полы, топить печь и снимать паутину с потолков. Любая пара глаз, направленная на меня, похоже весит не меньше тонны. Мое тело должно уже трещать по швам, ребра ломаться, глаза выкатываться из орбит, сердце как бешеное метаться из стороны в сторону, стараясь уклониться от метящих в него осколков грудной клетки. Но всего этого почему-то не происходит. Эти странные дети. Они жестоки и очаровательны, их присутствие ранит и сводит с ума, но я не могу указать им на дверь, в конце концов я всего лишь немощный старик, который не смог сочинить для них истории перед сном. Как я могу поднять руку на их беззащитные тельца, браниться и гнать их прочь в холодную ночь? Пожалуйста, простите меня. Я закрываю глаза. Изо рта медленно, как надоедливый гость, начинает выходить наружу воздух. Когда последняя его капля покидает тело, чьи-то маленькие губки прижимаются к моему уху и холодный северный ветер тихо-тихо шепчет в него маленькую фразу: "Мы хотим еще".
22.07.12

05:49 

Запись 243

Ну вот и все похоже. Осталась только головная боль и полтора месяца гребаного лета.

01:49 

Запись 242

Не все можно изменить, это похоже нормально. У всех есть личность, решения, которые они должны принимать сами, без давления со стороны. И не всегда надо пытаться приложить все усилия, чтобы качнуть его в свою сторону. Я так долго жил, да и продолжаю жить тем, что придумал для себя, в мире, где было плохо, с образами святыми, которые пытаюсь найти в этом мире. Нет, нельзя так делать, вот оно, великое открытие. Что-то должно случаться без личного вмешательства и видимо, когда это касается чужих жизней, человеческих отношений, то так и должно быть. Откуда тогда браться доверию, если все делать из-под палки. Да, аниме, это и правда мясорубка для психики, да и вообще любые красивые истории о разрушенных мечтах. Мертвые мечты других людей дают мертвые всходы в душах других, самые красивые и самые опасные всходы, которые наверное могут быть. Наверное надо делать, что зависит от тебя и доверять, верить, быть готовым, что все к черту развалится, все старания потеряют свою цель, но а вообще в жизни бывает по-другому? Грустно, как же грустно, больно и ещё раз больно. Как же можно жить без почвы под ногами, опираясь на веру из воздуха?

02:29 

Запись 241

Я не знал, что ревность это страшнее, чем одиночество. Хотя знал наверное, но забыл. Я просто клубок нервов, смотрю в одну точку и тщетно пытаюсь как-то успокоиться тем, что все в порядке, но вся логика ломается о навязчивые мысли о несправедливости и всем таком. Как будто в темноте машу руками, стараясь попасть в того, кого не вижу и не слышу, я даже не знаю, что делать, чтобы прекратить, задушить это. Если бы менять себя было бы так же просто, как делать неприятные вещи, стиснув зубы, много было бы по-другому. Хотел поговорить с кем-нибудь и не поговорил. Наверное это как желание жить. Сколько ни говори, все одно и то же, все равно пока сам не откроешь для себя америку, ничего не изменится, в этом ты лодка в океане и грести к берегу не поможет никто, кроме себя самого. Не все оказываются в таком отвратном положении наверное, но жаловаться на это все равно, что проклинать погоду. Когда это жизнь вообще была справедливой, да? Надеюсь, что я смогу справиться с собой и все тогда наладится.

Дневник Hukuma

главная