|
|
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
Попробую в этой теме описать свои впечатления и найденные грабли при портировании GUI приложения на Linux с использованием библиотеки CrossVCL Часть 1. Знакомство. Работа ведется с дистрибутивом Ubuntu Desktop 17.10. Сам дистрибутив был скачан отсюда https://www.ubuntu.com/desktop/1710 Первоначально хотелось перевести простой, но реальный проект. Особенности проекта: однопоточный VCL клиент БД. Компоненты доступа IBX (была надежда, что под линуксом встанут без проблем), внешние компоненты - VirtualTreeView (тут 50/50 взлетит или нет) и MSXML планировалось переписать на родной делфевый TXMLDocument. Проект собирался в XE3 на платформе Win32. Для начала я попробовал просто откомпилировать в Tokyo на платформе Win32. Получил набор сообщений об изменившихся заголовках. Сообщений было три типа 1) В TDataSet изменились описания некоторых protected методов, а потому мой наследник отказывался компилироваться 2) В IStream изменились var параметры методов с LargeInt (Int64) на LargeUInt (UInt64) 3) В IBX внутренние свойства SqlVar изменили тип с AnsiString на string Эти ошибки я поправил и под Win32 проект собрался. После этого я запустил компиляцию по Linux и отгреб сообщение о неизвестном типе AnsiString. После этого я понял, что все не так просто и для переноса придется попотеть. С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 17:11 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_После этого я запустил компиляцию по Linux и отгреб сообщение о неизвестном типе AnsiString Для справки: в некстгене они выкинули поддержку AnsiString, но в 10.1 одумались и вернули, сократив её до двух поддерживаемых типов: RawByteString и Utf8String. С этим портирование старого кода на некстген будет проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 17:23 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_После этого я запустил компиляцию по Linux и отгреб сообщение о неизвестном типе AnsiString. После этого я понял, что все не так просто и для переноса придется попотеть. Меняй на RawByteString. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 17:23 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
Часть 2. Компилируем Тогда было принято решение посмотреть пока тестовый проект. В проект был положен TDBGrid и кнопка с действием DataSet.Open. В качестве датасета был выбран все тот же IBX (TIBDataSet). Компилятор сказал, что модуля IBExternals он знать не знает. Возможно, это следствие моей криво-крякнутой студии, потому разбирание с этим вопросом я пока отложил, а прицепил грид к FireDac. И тут началось. Первая ошибка, с которой я столкнулся, это сообщение [DCC Error] E2597 C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\ld-linux.exe: error: cannot find -lgcc_s C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\ld-linux.exe: error: cannot find -lc C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\ld-linux.exe: error: cannot find -ldl C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\ld-linux.exe: error: cannot find -lpthread C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\ld-linux.exe: error: cannot find -lm После гугления нашел, что не хватает пакета gcc-6 Код: sql 1. и обновления SDK ошибка поменялась ld-linux.exe: error: cannot find -lGLна сайте Крюкова нашел рекомендацию. Поставить пакет libgl1-mesa-dev. После установки ошибка изменилась [DCC Error] E2597 C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\ld-linux.exe: error: cannot find -lz c:\program files (x86)\embarcadero\studio\19.0\lib\Linux64\release\System.ZLib.o:System.ZLib:function System::Zlib::deflate(System::Zlib::z_stream&, int): error: undefined reference to 'deflate' c:\program files (x86)\embarcadero\studio\19.0\lib\Linux64\release\System.ZLib.o:System.ZLib:function System::Zlib::deflateEnd(System::Zlib::z_stream&): error: undefined reference to 'deflateEnd' c:\program files (x86)\embarcadero\studio\19.0\lib\Linux64\release\System.ZLib.o:System.ZLib:function System::Zlib::inflate(System::Zlib::z_stream&, int): error: undefined reference to 'inflate' c:\program files (x86)\embarcadero\studio\19.0\lib\Linux64\release\System.ZLib.o:System.ZLib:function System::Zlib::inflateEnd(System::Zlib::z_stream&): error: undefined reference to 'inflateEnd' c:\program files (x86)\embarcadero\studio\19.0\lib\Linux64\release\System.ZLib.o:System.ZLib:function System::Zlib::inflateReset(System::Zlib::z_stream&): error: undefined reference to 'inflateReset' c:\program files (x86)\embarcadero\studio\19.0\lib\Linux64\release\System.ZLib.o:System.ZLib:function System::Zlib::crc32(unsigned long, unsigned char*, unsigned int): error: undefined reference to 'crc32' c:\program files (x86)\embarcadero\studio\19.0\lib\Linux64\release\System.ZLib.o:System.ZLib:function System::Zlib::deflateInit2_(System::Zlib::z_stream&, int, int, int, int, int, char*, int): error: undefined reference to 'deflateInit2_' c:\program files (x86)\embarcadero\studio\19.0\lib\Linux64\release\System.ZLib.o:System.ZLib:function System::Zlib::inflateInit2_(System::Zlib::z_stream&, int, char*, int): error: undefined reference to 'inflateInit2_'Крюков сказал, что с проблемами zlib это к Эмбаркадере, но у него вывесили список пакетов, после установки которых все собралосьsudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev libglfw3-dev libgles2-mesa-dev После небольших танцев с PAServer (почему-то не резолвилось имя Linux машины) все задеплоилось на удаленную машину ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 17:58 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
rgreatМеняй на RawByteString.Пока это не есть проблема ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 17:59 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_После небольших танцев с PAServer (почему-то не резолвилось имя Linux машины) все задеплоилось на удаленную машинуЗапустилось? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 18:10 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
rgreatЗапустилось? :)Будут еще части :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 18:15 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
А почему бы не собрать сначала 64-версию под nextgen компилятор (исправив косяки в коде), а потом уже переносить под линукс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 18:21 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
JaDiА почему бы не собрать сначала 64-версию под nextgen компилятор (исправив косяки в коде), а потом уже переносить под линукс?Под виндой nextgen извращения не работают. авторAny code compiled for Windows that is marked with NEXTGEN will be ignored. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 18:34 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_вывесили список пакетов, после установки которых все собралосьsudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev libglfw3-dev libgles2-mesa-devВот за вот эту красоту я и не люблю линукс... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 18:41 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
rgreatВот за вот эту красоту я и не люблю линукс... Ну да, в ендюзерском дистре не установлены девелоперские пакеты. Это то же самое, что нелюбить винду из-за неустановленного Windows SDK. Глупости какие... Кроме того, не помню, чтобы абракадабра давала инструкции относительно сборки в окружении 17.10, которая, кстати, даже не LTS, а промежуточная версия для отладки новой функциональности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 19:00 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyНу да, в ендюзерском дистре не установлены девелоперские пакеты. Это то же самое, что нелюбить винду из-за неустановленного Windows SDK. Глупости какие... Кроме того, не помню, чтобы абракадабра давала инструкции относительно сборки в окружении 17.10, которая, кстати, даже не LTS, а промежуточная версия для отладки новой функциональности.Сравни сложность по установке какого-нибуть Visual C++ Runtime из 1-го файла и игры в "угадай и собери нужные пакеты" под текущую версию линукса (чтобы было веселей - в offline режиме). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 19:16 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
Часть 3. Запускаем После деплоя и попытки запуска я получил ошибкуNo protocol specifiedпоначалу я подумал, что это какие-то грабли при коннекте к БД, но потом нашел, что это проблема запуска GUI приложения из под sudo. Здесь были описаны пути решения, но т.к. я под sudo оказался случайно (забыл выйти после установки пакетов), то я просто вышел из этого режима и приложение запустилось (к слову, сегодня я не смог повторить эту ошибку. Сегодня все запускается и так, и так) После запуска, при попытке коннекта, приложение ожидаемо не нашло клиента Interbase. Отдельного пакета с клиентом я не нашел, поэтому скачал с Эмбаркадеры полную версию InterbaseXE7. Переписал инсталляху на линукс-машину, распаковал, запустил и установил Client Only При попытке коннекта к базе (база на удаленном сервере), я получил ошибку, что компьютера с таким именем не существует (таки где-то криво настроен нейм-резолвинг Windows-Linux). Но самое плохое, что это сообщение было выведено крякозябрами (вывод юникода в анси кодировке). После изменения в свойствах соединения имени сервера на его IP-адрес, к базе я подключился и данные отобразились в гриде. Но вся кирилица отборазилась в виде вопросов. В Win32 версии все отображается корректно. Пока на этом останавливаюсь и буду искать способ решения этой проблемы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 19:23 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
rgreatСравни сложность по установке какого-нибуть Visual C++ Runtime из 1-го файла и игры в "угадай и собери нужные пакеты" под текущую версию линукса (чтобы было веселей - в offline режиме). dev-пакеты, это не аналог библиотек сишного рантайма, это как-раз аналог SDK, в котором лежат .lib и .obj для сборки. И я тебе ответственно заявляю, что установить любые пакеты в линуксе сильно проще, чем те же редистрибутаблы сишные, которые тоже нужно ещё найти, и вообще понять, какая версия нужна софту. Про танцы с sdk вообще молчу. В тоже время, если следовать инструкциям абракадабры, и ставить LTS (а текущий LTS - 16.04) версию с Ubuntu SDK, проблем с компиляцией под линукс нет и никакие доустановки пакетов не требуются. ССЗБ, короче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 19:28 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeydev-пакеты, это не аналог библиотек сишного рантайма, это как-раз аналог SDK, в котором лежат .lib и .obj для сборки Это тот, который автоматом по-дефолту ставится со студией? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 19:40 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexeydev-пакеты, это не аналог библиотек сишного рантайма, это как-раз аналог SDK, в котором лежат .lib и .obj для сборки. И я тебе ответственно заявляю, что установить любые пакеты в линуксе сильно проще, чем те же редистрибутаблы сишныеЭто верно разве что для обожающих консольку "красноглазиков". , которые тоже нужно ещё найти, и вообще понять, какая версия нужна софту.99% софта под виндой не требует поиска дистрибутивов и работает "из коробки". Про танцы с sdk вообще молчу.Дык а чего там говорить то? Все ставиться вместе со средой. Автоматом. И пофиг какая там версия винды (если она еще поддерживается, конечно). В тоже время, если следовать инструкциям абракадабры, и ставить LTS (а текущий LTS - 16.04) версию с Ubuntu SDK, проблем с компиляцией под линукс нет и никакие доустановки пакетов не требуются. ССЗБ, короче.Так и вижу что Студия или Дельфя требуют для безгеморойной работы только Win8.1 (причем именно ver. 6.3.9200). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 19:41 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
alekcvpЭто тот, который автоматом по-дефолту ставится со студией? :) С моей студией не ставится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 19:46 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
rgreatЭто верно разве что для обожающих консольку "красноглазиков". Это верно для любого, кто хоть раз попробовал. Теоретикам не понять. rgreat99% софта под виндой не требует поиска дистрибутивов и работает "из коробки". Да-да, расскажи мне, а то я за 18 виндовых лет мало чего видел... rgreatДык а чего там говорить то? Все ставиться вместе со средой. Автоматом. И пофиг какая там версия винды (если она еще поддерживается, конечно). Не ставится. С шелом не ставится, например. И про любую, версию винды не звизди, сейчас SDK десяточку хочет. rgreatТак и вижу что Студия или Дельфя требуют для безгеморойной работы только Win8.1 (причем именно ver. 6.3.9200). Ты правда не понимаешь о чём тебе пишут? Речь не о том, что софт будет работать только с определённой версией дистра - работать он будет практически везде - речь о том, что девелоперских пакетов, которые нужны для сборки софта, нет в десктопном дистре по дефолту. Для этого нужно ставить SDK, ну или вот так ручками ковыряться в зависимостях. Как ставить на LTS вендор объясняет, а кто желает гемороя тот его получает, обычно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 20:13 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
А кто скажет, удаленная отладка на Линуксе не работает, что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 20:15 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_А кто скажет, удаленная отладка на Линуксе не работает, что ли? У меня работала. Но я на 16.04 пробовал. Ты PAServer запустил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 20:19 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
rgreatТы PAServer запустил?Конечно. Я же через него деплою ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 20:21 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
rgreatТы PAServer запустил?Я даже профиль не могу выбрать, когда указываю использование Linux отладчика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 20:23 |
|
||
|
CrossVCL впечатления
|
|||
|---|---|---|---|
|
#18+
Kazantsev AlexeyЭто верно для любого, кто хоть раз попробовал. Теоретикам не понять.Раз 5 приходилось. Раза 3 даже получилось. Но тут как я и говорил это "красноглазик-френдли" технология. Я видимо недостаточно think different. Да-да, расскажи мне, а то я за 18 виндовых лет мало чего видел...Ну давай вместе понастольгируем по приколам Win ME. Не ставится. С шелом не ставится, например. И про любую, версию винды не звизди, сейчас SDK десяточку хочет. 1. Дельфям SDK вообще не нужен. 2. MS VS ставит все что нужно само, при условии что выбранная версия студии вообще поддерживает нужную винду. Ты правда не понимаешь о чём тебе пишут? Речь не о том, что софт будет работать только с определённой версией дистра - работать он будет практически везде - речь о том, что девелоперских пакетов, которые нужны для сборки софта, нет в десктопном дистре по дефолту. Для этого нужно ставить SDK, ну или вот так ручками ковыряться в зависимостях. Как ставить на LTS вендор объясняет, а кто желает гемороя тот его получает, обычно.А ты понимаешь? Почему в винде можно легко найти гуглем, скачать и установить дистрибутив в 1м файле и все заработает, а в линухе нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2018, 20:32 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39581968&tid=2041245]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 411ms |

| 0 / 0 |
