Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 CrossVCL впечатления  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9993
Попробую в этой теме описать свои впечатления и найденные грабли при портировании 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 янв 18, 17:11    [21094279]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2756
_Vasilisk_
После этого я запустил компиляцию по Linux и отгреб сообщение о неизвестном типе AnsiString

Для справки: в некстгене они выкинули поддержку AnsiString, но в 10.1 одумались и вернули, сократив её до двух поддерживаемых типов: RawByteString и Utf8String. С этим портирование старого кода на некстген будет проще.
10 янв 18, 17:23    [21094316]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
rgreat
Member

Откуда:
Сообщений: 3862
_Vasilisk_
После этого я запустил компиляцию по Linux и отгреб сообщение о неизвестном типе AnsiString. После этого я понял, что все не так просто и для переноса придется попотеть.

Меняй на RawByteString.
10 янв 18, 17:23    [21094319]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9993
Часть 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
apt-get install gcc-6
и обновления 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 янв 18, 17:58    [21094453]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9993
rgreat
Меняй на RawByteString.
Пока это не есть проблема
10 янв 18, 17:59    [21094459]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
rgreat
Member

Откуда:
Сообщений: 3862
_Vasilisk_
После небольших танцев с PAServer (почему-то не резолвилось имя Linux машины) все задеплоилось на удаленную машину
Запустилось? :)
10 янв 18, 18:10    [21094477]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9993
rgreat
Запустилось? :)
Будут еще части :)
10 янв 18, 18:15    [21094485]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3249
А почему бы не собрать сначала 64-версию под nextgen компилятор (исправив косяки в коде), а потом уже переносить под линукс?
10 янв 18, 18:21    [21094505]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
rgreat
Member

Откуда:
Сообщений: 3862
JaDi
А почему бы не собрать сначала 64-версию под nextgen компилятор (исправив косяки в коде), а потом уже переносить под линукс?
Под виндой nextgen извращения не работают.

автор
Any code compiled for Windows that is marked with NEXTGEN will be ignored.
10 янв 18, 18:34    [21094552]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
rgreat
Member

Откуда:
Сообщений: 3862
_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 янв 18, 18:41    [21094575]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2756
rgreat
Вот за вот эту красоту я и не люблю линукс...

Ну да, в ендюзерском дистре не установлены девелоперские пакеты. Это то же самое, что нелюбить винду из-за неустановленного Windows SDK. Глупости какие... Кроме того, не помню, чтобы абракадабра давала инструкции относительно сборки в окружении 17.10, которая, кстати, даже не LTS, а промежуточная версия для отладки новой функциональности.
10 янв 18, 19:00    [21094624]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
rgreat
Member

Откуда:
Сообщений: 3862
Kazantsev Alexey
Ну да, в ендюзерском дистре не установлены девелоперские пакеты. Это то же самое, что нелюбить винду из-за неустановленного Windows SDK. Глупости какие... Кроме того, не помню, чтобы абракадабра давала инструкции относительно сборки в окружении 17.10, которая, кстати, даже не LTS, а промежуточная версия для отладки новой функциональности.
Сравни сложность по установке какого-нибуть Visual C++ Runtime из 1-го файла и игры в "угадай и собери нужные пакеты" под текущую версию линукса (чтобы было веселей - в offline режиме).
10 янв 18, 19:16    [21094646]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9993
Часть 3. Запускаем

После деплоя и попытки запуска я получил ошибку
No protocol specified
поначалу я подумал, что это какие-то грабли при коннекте к БД, но потом нашел, что это проблема запуска GUI приложения из под sudo. Здесь были описаны пути решения, но т.к. я под sudo оказался случайно (забыл выйти после установки пакетов), то я просто вышел из этого режима и приложение запустилось (к слову, сегодня я не смог повторить эту ошибку. Сегодня все запускается и так, и так)

После запуска, при попытке коннекта, приложение ожидаемо не нашло клиента Interbase. Отдельного пакета с клиентом я не нашел, поэтому скачал с Эмбаркадеры полную версию InterbaseXE7. Переписал инсталляху на линукс-машину, распаковал, запустил и установил Client Only

При попытке коннекта к базе (база на удаленном сервере), я получил ошибку, что компьютера с таким именем не существует (таки где-то криво настроен нейм-резолвинг Windows-Linux). Но самое плохое, что это сообщение было выведено крякозябрами (вывод юникода в анси кодировке). После изменения в свойствах соединения имени сервера на его IP-адрес, к базе я подключился и данные отобразились в гриде. Но вся кирилица отборазилась в виде вопросов. В Win32 версии все отображается корректно. Пока на этом останавливаюсь и буду искать способ решения этой проблемы
10 янв 18, 19:23    [21094656]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2756
rgreat
Сравни сложность по установке какого-нибуть Visual C++ Runtime из 1-го файла и игры в "угадай и собери нужные пакеты" под текущую версию линукса (чтобы было веселей - в offline режиме).

dev-пакеты, это не аналог библиотек сишного рантайма, это как-раз аналог SDK, в котором лежат .lib и .obj для сборки. И я тебе ответственно заявляю, что установить любые пакеты в линуксе сильно проще, чем те же редистрибутаблы сишные, которые тоже нужно ещё найти, и вообще понять, какая версия нужна софту. Про танцы с sdk вообще молчу. В тоже время, если следовать инструкциям абракадабры, и ставить LTS (а текущий LTS - 16.04) версию с Ubuntu SDK, проблем с компиляцией под линукс нет и никакие доустановки пакетов не требуются. ССЗБ, короче.
10 янв 18, 19:28    [21094672]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
alekcvp
Member

Откуда:
Сообщений: 606
Kazantsev Alexey
dev-пакеты, это не аналог библиотек сишного рантайма, это как-раз аналог SDK, в котором лежат .lib и .obj для сборки

Это тот, который автоматом по-дефолту ставится со студией? :)
10 янв 18, 19:40    [21094687]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
rgreat
Member

Откуда:
Сообщений: 3862
Kazantsev Alexey
dev-пакеты, это не аналог библиотек сишного рантайма, это как-раз аналог SDK, в котором лежат .lib и .obj для сборки. И я тебе ответственно заявляю, что установить любые пакеты в линуксе сильно проще, чем те же редистрибутаблы сишные
Это верно разве что для обожающих консольку "красноглазиков".

, которые тоже нужно ещё найти, и вообще понять, какая версия нужна софту.
99% софта под виндой не требует поиска дистрибутивов и работает "из коробки".

Про танцы с sdk вообще молчу.
Дык а чего там говорить то? Все ставиться вместе со средой. Автоматом. И пофиг какая там версия винды (если она еще поддерживается, конечно).

В тоже время, если следовать инструкциям абракадабры, и ставить LTS (а текущий LTS - 16.04) версию с Ubuntu SDK, проблем с компиляцией под линукс нет и никакие доустановки пакетов не требуются. ССЗБ, короче.
Так и вижу что Студия или Дельфя требуют для безгеморойной работы только Win8.1 (причем именно ver. 6.3.9200).
10 янв 18, 19:41    [21094689]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2756
alekcvp
Это тот, который автоматом по-дефолту ставится со студией? :)

С моей студией не ставится.
10 янв 18, 19:46    [21094698]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
rgreat
Member

Откуда:
Сообщений: 3862
Kazantsev Alexey
С моей студией не ставится.

Картинка с другого сайта.
10 янв 18, 19:53    [21094716]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2756
rgreat
Это верно разве что для обожающих консольку "красноглазиков".

Это верно для любого, кто хоть раз попробовал. Теоретикам не понять.

rgreat
99% софта под виндой не требует поиска дистрибутивов и работает "из коробки".

Да-да, расскажи мне, а то я за 18 виндовых лет мало чего видел...

rgreat
Дык а чего там говорить то? Все ставиться вместе со средой. Автоматом. И пофиг какая там версия винды (если она еще поддерживается, конечно).

Не ставится. С шелом не ставится, например. И про любую, версию винды не звизди, сейчас SDK десяточку хочет.

rgreat
Так и вижу что Студия или Дельфя требуют для безгеморойной работы только Win8.1 (причем именно ver. 6.3.9200).

Ты правда не понимаешь о чём тебе пишут? Речь не о том, что софт будет работать только с определённой версией дистра - работать он будет практически везде - речь о том, что девелоперских пакетов, которые нужны для сборки софта, нет в десктопном дистре по дефолту. Для этого нужно ставить SDK, ну или вот так ручками ковыряться в зависимостях. Как ставить на LTS вендор объясняет, а кто желает гемороя тот его получает, обычно.
10 янв 18, 20:13    [21094769]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9993
А кто скажет, удаленная отладка на Линуксе не работает, что ли?

К сообщению приложен файл. Размер - 5Kb
10 янв 18, 20:15    [21094771]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
rgreat
Member

Откуда:
Сообщений: 3862
_Vasilisk_
А кто скажет, удаленная отладка на Линуксе не работает, что ли?

У меня работала.

Но я на 16.04 пробовал.

Ты PAServer запустил?
10 янв 18, 20:19    [21094776]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9993
rgreat
Ты PAServer запустил?
Конечно. Я же через него деплою
10 янв 18, 20:21    [21094780]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9993
rgreat
Ты PAServer запустил?
Я даже профиль не могу выбрать, когда указываю использование Linux отладчика
10 янв 18, 20:23    [21094784]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
rgreat
Member

Откуда:
Сообщений: 3862
Kazantsev Alexey
Это верно для любого, кто хоть раз попробовал. Теоретикам не понять.
Раз 5 приходилось. Раза 3 даже получилось.
Но тут как я и говорил это "красноглазик-френдли" технология. Я видимо недостаточно think different.

Да-да, расскажи мне, а то я за 18 виндовых лет мало чего видел...
Ну давай вместе понастольгируем по приколам Win ME.

Не ставится. С шелом не ставится, например. И про любую, версию винды не звизди, сейчас SDK десяточку хочет.

1. Дельфям SDK вообще не нужен.
2. MS VS ставит все что нужно само, при условии что выбранная версия студии вообще поддерживает нужную винду.

Ты правда не понимаешь о чём тебе пишут? Речь не о том, что софт будет работать только с определённой версией дистра - работать он будет практически везде - речь о том, что девелоперских пакетов, которые нужны для сборки софта, нет в десктопном дистре по дефолту. Для этого нужно ставить SDK, ну или вот так ручками ковыряться в зависимостях. Как ставить на LTS вендор объясняет, а кто желает гемороя тот его получает, обычно.
А ты понимаешь?
Почему в винде можно легко найти гуглем, скачать и установить дистрибутив в 1м файле и все заработает, а в линухе нет?
10 янв 18, 20:32    [21094798]     Ответить | Цитировать Сообщить модератору
 Re: CrossVCL впечатления  [new]
rgreat
Member

Откуда:
Сообщений: 3862
_Vasilisk_,

К сообщению приложен файл. Размер - 124Kb
10 янв 18, 20:37    [21094806]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Delphi Ответить