Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CrossVCL впечатления / 25 сообщений из 79, страница 1 из 4
10.01.2018, 17:11
    #39581911
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
Попробую в этой теме описать свои впечатления и найденные грабли при портировании 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
...
Рейтинг: 0 / 0
10.01.2018, 17:23
    #39581925
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
_Vasilisk_После этого я запустил компиляцию по Linux и отгреб сообщение о неизвестном типе AnsiString
Для справки: в некстгене они выкинули поддержку AnsiString, но в 10.1 одумались и вернули, сократив её до двух поддерживаемых типов: RawByteString и Utf8String. С этим портирование старого кода на некстген будет проще.
...
Рейтинг: 0 / 0
10.01.2018, 17:23
    #39581926
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
_Vasilisk_После этого я запустил компиляцию по Linux и отгреб сообщение о неизвестном типе AnsiString. После этого я понял, что все не так просто и для переноса придется попотеть.
Меняй на RawByteString.
...
Рейтинг: 0 / 0
10.01.2018, 17:58
    #39581959
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
Часть 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.
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 машины) все задеплоилось на удаленную машину
...
Рейтинг: 0 / 0
10.01.2018, 17:59
    #39581961
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
rgreatМеняй на RawByteString.Пока это не есть проблема
...
Рейтинг: 0 / 0
10.01.2018, 18:10
    #39581968
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
_Vasilisk_После небольших танцев с PAServer (почему-то не резолвилось имя Linux машины) все задеплоилось на удаленную машинуЗапустилось? :)
...
Рейтинг: 0 / 0
10.01.2018, 18:15
    #39581972
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
rgreatЗапустилось? :)Будут еще части :)
...
Рейтинг: 0 / 0
10.01.2018, 18:21
    #39581978
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
А почему бы не собрать сначала 64-версию под nextgen компилятор (исправив косяки в коде), а потом уже переносить под линукс?
...
Рейтинг: 0 / 0
10.01.2018, 18:34
    #39581993
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
JaDiА почему бы не собрать сначала 64-версию под nextgen компилятор (исправив косяки в коде), а потом уже переносить под линукс?Под виндой nextgen извращения не работают.

авторAny code compiled for Windows that is marked with NEXTGEN will be ignored.
...
Рейтинг: 0 / 0
10.01.2018, 18:41
    #39582006
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
_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Вот за вот эту красоту я и не люблю линукс...
...
Рейтинг: 0 / 0
10.01.2018, 19:00
    #39582018
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
rgreatВот за вот эту красоту я и не люблю линукс...
Ну да, в ендюзерском дистре не установлены девелоперские пакеты. Это то же самое, что нелюбить винду из-за неустановленного Windows SDK. Глупости какие... Кроме того, не помню, чтобы абракадабра давала инструкции относительно сборки в окружении 17.10, которая, кстати, даже не LTS, а промежуточная версия для отладки новой функциональности.
...
Рейтинг: 0 / 0
10.01.2018, 19:16
    #39582027
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
Kazantsev AlexeyНу да, в ендюзерском дистре не установлены девелоперские пакеты. Это то же самое, что нелюбить винду из-за неустановленного Windows SDK. Глупости какие... Кроме того, не помню, чтобы абракадабра давала инструкции относительно сборки в окружении 17.10, которая, кстати, даже не LTS, а промежуточная версия для отладки новой функциональности.Сравни сложность по установке какого-нибуть Visual C++ Runtime из 1-го файла и игры в "угадай и собери нужные пакеты" под текущую версию линукса (чтобы было веселей - в offline режиме).
...
Рейтинг: 0 / 0
10.01.2018, 19:23
    #39582029
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
Часть 3. Запускаем

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

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

При попытке коннекта к базе (база на удаленном сервере), я получил ошибку, что компьютера с таким именем не существует (таки где-то криво настроен нейм-резолвинг Windows-Linux). Но самое плохое, что это сообщение было выведено крякозябрами (вывод юникода в анси кодировке). После изменения в свойствах соединения имени сервера на его IP-адрес, к базе я подключился и данные отобразились в гриде. Но вся кирилица отборазилась в виде вопросов. В Win32 версии все отображается корректно. Пока на этом останавливаюсь и буду искать способ решения этой проблемы
...
Рейтинг: 0 / 0
10.01.2018, 19:28
    #39582036
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
rgreatСравни сложность по установке какого-нибуть Visual C++ Runtime из 1-го файла и игры в "угадай и собери нужные пакеты" под текущую версию линукса (чтобы было веселей - в offline режиме).
dev-пакеты, это не аналог библиотек сишного рантайма, это как-раз аналог SDK, в котором лежат .lib и .obj для сборки. И я тебе ответственно заявляю, что установить любые пакеты в линуксе сильно проще, чем те же редистрибутаблы сишные, которые тоже нужно ещё найти, и вообще понять, какая версия нужна софту. Про танцы с sdk вообще молчу. В тоже время, если следовать инструкциям абракадабры, и ставить LTS (а текущий LTS - 16.04) версию с Ubuntu SDK, проблем с компиляцией под линукс нет и никакие доустановки пакетов не требуются. ССЗБ, короче.
...
Рейтинг: 0 / 0
10.01.2018, 19:40
    #39582041
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
Kazantsev Alexeydev-пакеты, это не аналог библиотек сишного рантайма, это как-раз аналог SDK, в котором лежат .lib и .obj для сборки
Это тот, который автоматом по-дефолту ставится со студией? :)
...
Рейтинг: 0 / 0
10.01.2018, 19:41
    #39582042
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
Kazantsev Alexeydev-пакеты, это не аналог библиотек сишного рантайма, это как-раз аналог SDK, в котором лежат .lib и .obj для сборки. И я тебе ответственно заявляю, что установить любые пакеты в линуксе сильно проще, чем те же редистрибутаблы сишныеЭто верно разве что для обожающих консольку "красноглазиков".

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

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

В тоже время, если следовать инструкциям абракадабры, и ставить LTS (а текущий LTS - 16.04) версию с Ubuntu SDK, проблем с компиляцией под линукс нет и никакие доустановки пакетов не требуются. ССЗБ, короче.Так и вижу что Студия или Дельфя требуют для безгеморойной работы только Win8.1 (причем именно ver. 6.3.9200).
...
Рейтинг: 0 / 0
10.01.2018, 19:46
    #39582045
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
alekcvpЭто тот, который автоматом по-дефолту ставится со студией? :)
С моей студией не ставится.
...
Рейтинг: 0 / 0
10.01.2018, 19:53
    #39582050
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
Kazantsev AlexeyС моей студией не ставится.
...
Рейтинг: 0 / 0
10.01.2018, 20:13
    #39582057
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
rgreatЭто верно разве что для обожающих консольку "красноглазиков".
Это верно для любого, кто хоть раз попробовал. Теоретикам не понять.

rgreat99% софта под виндой не требует поиска дистрибутивов и работает "из коробки".
Да-да, расскажи мне, а то я за 18 виндовых лет мало чего видел...

rgreatДык а чего там говорить то? Все ставиться вместе со средой. Автоматом. И пофиг какая там версия винды (если она еще поддерживается, конечно).
Не ставится. С шелом не ставится, например. И про любую, версию винды не звизди, сейчас SDK десяточку хочет.

rgreatТак и вижу что Студия или Дельфя требуют для безгеморойной работы только Win8.1 (причем именно ver. 6.3.9200).
Ты правда не понимаешь о чём тебе пишут? Речь не о том, что софт будет работать только с определённой версией дистра - работать он будет практически везде - речь о том, что девелоперских пакетов, которые нужны для сборки софта, нет в десктопном дистре по дефолту. Для этого нужно ставить SDK, ну или вот так ручками ковыряться в зависимостях. Как ставить на LTS вендор объясняет, а кто желает гемороя тот его получает, обычно.
...
Рейтинг: 0 / 0
10.01.2018, 20:15
    #39582058
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
А кто скажет, удаленная отладка на Линуксе не работает, что ли?
...
Рейтинг: 0 / 0
10.01.2018, 20:19
    #39582060
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
_Vasilisk_А кто скажет, удаленная отладка на Линуксе не работает, что ли?
У меня работала.

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

Ты PAServer запустил?
...
Рейтинг: 0 / 0
10.01.2018, 20:21
    #39582061
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
rgreatТы PAServer запустил?Конечно. Я же через него деплою
...
Рейтинг: 0 / 0
10.01.2018, 20:23
    #39582062
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
rgreatТы PAServer запустил?Я даже профиль не могу выбрать, когда указываю использование Linux отладчика
...
Рейтинг: 0 / 0
10.01.2018, 20:32
    #39582066
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
Kazantsev AlexeyЭто верно для любого, кто хоть раз попробовал. Теоретикам не понять.Раз 5 приходилось. Раза 3 даже получилось.
Но тут как я и говорил это "красноглазик-френдли" технология. Я видимо недостаточно think different.

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

Не ставится. С шелом не ставится, например. И про любую, версию винды не звизди, сейчас SDK десяточку хочет.
1. Дельфям SDK вообще не нужен.
2. MS VS ставит все что нужно само, при условии что выбранная версия студии вообще поддерживает нужную винду.

Ты правда не понимаешь о чём тебе пишут? Речь не о том, что софт будет работать только с определённой версией дистра - работать он будет практически везде - речь о том, что девелоперских пакетов, которые нужны для сборки софта, нет в десктопном дистре по дефолту. Для этого нужно ставить SDK, ну или вот так ручками ковыряться в зависимостях. Как ставить на LTS вендор объясняет, а кто желает гемороя тот его получает, обычно.А ты понимаешь?
Почему в винде можно легко найти гуглем, скачать и установить дистрибутив в 1м файле и все заработает, а в линухе нет?
...
Рейтинг: 0 / 0
10.01.2018, 20:37
    #39582068
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CrossVCL впечатления
_Vasilisk_,
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CrossVCL впечатления / 25 сообщений из 79, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]