Портирование проекта Windows -> Linux

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Портирование проекта Windows -> Linux

Сообщение wwswowsogon » 03.12.2020 21:27:38

Всем доброго времени суток!

Есть идея расширить применимость проекта для Linux. :) Проект не слишком сложный, но довольно объёмный. Никаких сильно специальных компонентов там не используется. Используется БД на Firebird.

Насколько мне известно, в Lazarus'е с кросскомпиляцией всё довольно неплохо. Но большие проекты пока не переносил.

Собственно, какие есть общие принципы для этого процесса?

пересобираем .dll на .so, меняем '\' на '/' или используем DirectorySeparator, меняем настройки БД... Всё? )

P. S. Ещё в проекте часто используется модуль windows, в основном, для всякого типа ShellExecute.
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Портирование проекта Windows -> Linux

Сообщение Снег Север » 04.12.2020 08:43:43

Возможно ShellExecute придется заменять на платформонезависимый TProcessUTF8
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Портирование проекта Windows -> Linux

Сообщение zub » 04.12.2020 08:47:36

Проблемы будут только в случае использования сторонних вин-онли компонентов
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Портирование проекта Windows -> Linux

Сообщение olegy123 » 04.12.2020 09:19:39

wwswowsogon писал(а):пересобираем .dll на .so, меняем '\' на '/' или используем DirectorySeparator, меняем настройки БД... Всё? )

если хотите использовать стандартные компоненты TIBConnection, то просто ставите клинские библиотеки firebirdSQL из репозитария системы. Этого достаточно.
В Linux-е принято .so класть в общедоступные папки, и кэшировать их ldconfig. За исключением если вы хотите запустить свои особые .so но при этом не хотите чтобы другие программы могли их видеть в помощь переменные окружения LD_LIBRARY_PATH

wwswowsogon писал(а):P. S. Ещё в проекте часто используется модуль windows, в основном, для всякого типа ShellExecute.

тут проблем тоже нет, все аналогично, за исключением разделителя папок в path.
Но есть маленькая особенность - программы запускаемые от родительской программы принадлежат ей. Если родительская программа завершается - то завершаются все дочерние. Исключение - fork() -нутые.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Портирование проекта Windows -> Linux

Сообщение wwswowsogon » 05.12.2020 11:53:41

Всем спасибо за информацию. :)

olegy123 писал(а):В Linux-е принято .so класть в общедоступные папки


А что будет, если не укладывать их в общие папки, а держать в корне проекта? Так-то я не против положить их ко всем прочим .so, но тогда придется делать некий инсталлятор, который это будет делать автоматически.

olegy123 писал(а):тут проблем тоже нет, все аналогично, за исключением разделителя папок в path.
Но есть маленькая особенность - программы запускаемые от родительской программы принадлежат ей. Если родительская программа завершается - то завершаются все дочерние. Исключение - fork() -нутые.


Нуу, это вообще не проблема. :)
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Портирование проекта Windows -> Linux

Сообщение Снег Север » 05.12.2020 15:37:07

wwswowsogon писал(а):А что будет, если не укладывать их в общие папки, а держать в корне проекта?

Будет то, что что этот [censored] линух не будет их использовать. Я на такое нарывался не раз. За что линухи терпеть ненавижу.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Портирование проекта Windows -> Linux

Сообщение wwswowsogon » 05.12.2020 17:03:39

Снег Север писал(а):
wwswowsogon писал(а):А что будет, если не укладывать их в общие папки, а держать в корне проекта?

Будет то, что что этот [censored] линух не будет их использовать. Я на такое нарывался не раз. За что линухи терпеть ненавижу.


Ха-ха, спасибо, что предупредили. :) Буду знать наперёд. :)
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

Re: Портирование проекта Windows -> Linux

Сообщение Сквозняк » 05.12.2020 19:35:31

Снег Север писал(а):
wwswowsogon писал(а):А что будет, если не укладывать их в общие папки, а держать в корне проекта?

Будет то, что что этот [censored] линух не будет их использовать. Я на такое нарывался не раз. За что линухи терпеть ненавижу.

Типичный неосилятор. Если ты посмотришь на линуксовый жирнолис, то обнаружишь у него в корне кучу *.so и несколько в каталогах. И всё это нормально используется. Залезаешь в свою линуксовую шпаргалку и смотришь как такое делается:
Код: Выделить всё
LD_LIBRARY_PATH     - переменная для путей к библиотекам
                  пример применения
export LD_LIBRARY_PATH=/opt/proprietary-shit/libs/Qt; /opt/proprietary-shit/bin/proprietary-shit-gui
LD_PRELOAD

То есть для программы нужен запускатель, например скриптик на баше, который введёт нужные команды в терминале, а после запустит в нём же программу.
В блендере сеть такой баш скрипт:
Код: Выделить всё
#!/bin/sh
BF_DIST_BIN=`dirname "$0"`
BF_PROGRAM="blender" # BF_PROGRAM=`basename "$0"`-bin
exitcode=0

LD_LIBRARY_PATH=${BF_DIST_BIN}/lib:${LD_LIBRARY_PATH}

if [ -n "$LD_LIBRARYN32_PATH" ]; then
    LD_LIBRARYN32_PATH=${BF_DIST_BIN}/lib:${LD_LIBRARYN32_PATH}
fi
if [ -n "$LD_LIBRARYN64_PATH" ]; then
    LD_LIBRARYN64_PATH=${BF_DIST_BIN}/lib:${LD_LIBRARYN64_PATH}
fi
if [ -n "$LD_LIBRARY_PATH_64" ]; then
    LD_LIBRARY_PATH_64=${BF_DIST_BIN}/lib:${LD_LIBRARY_PATH_64}
fi

export LD_LIBRARY_PATH LD_LIBRARYN32_PATH LD_LIBRARYN64_PATH LD_LIBRARY_PATH_64 LD_PRELOAD

"$BF_DIST_BIN/$BF_PROGRAM" ${1+"$@"}
exitcode=$?
exit $exitcode

А вот так, башскриптом, запускается одна игрушка:
Код: Выделить всё
#!/bin/sh
export LD_LIBRARY_PATH=./Lib:/usr/local/lib:$LD_LIBRARY_PATH
exec ./NewSupaplexX $*
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

Re: Портирование проекта Windows -> Linux

Сообщение Снег Север » 05.12.2020 20:25:12

Сквозняк писал(а):То есть для программы нужен запускатель, например скриптик на баше

А на винде не надо никаких танцев с бубном - программа всегда приоритетно берет те библиотеки, которые лежат рядом с исполняемым файлом.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Портирование проекта Windows -> Linux

Сообщение Seenkao » 05.12.2020 20:43:18

Снег Север писал(а):А на винде не надо никаких танцев с бубном - программа всегда приоритетно берет те библиотеки, которые лежат рядом с исполняемым файлом.

Если ты указал внутри программы свою папку, то тоже самое и в Linux будет.
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

Re: Портирование проекта Windows -> Linux

Сообщение Сквозняк » 05.12.2020 23:34:35

Снег Север писал(а):
Сквозняк писал(а):То есть для программы нужен запускатель, например скриптик на баше

А на винде не надо никаких танцев с бубном - программа всегда приоритетно берет те библиотеки, которые лежат рядом с исполняемым файлом.

Это мелочи по сравнению с виндовой дрочильней на кодировки. Запускаешь программу с путями содержащими неанглийские буквы и случается лажа при создании каталогов, загрузке и сохранению файлов. А всё потому что посылаемые в неё данные перекодируются. Эти идиоты не допёрли перекодировать только то, что в консоль вводят ручками и копипастой мышки, а то что вводит программа как команды - не трогать. Несколько дней потратил чтобы набрутфорсить нормальную работу программы с русскими буквами в путях в семёрке и десятке.
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

Re: Портирование проекта Windows -> Linux

Сообщение Снег Север » 06.12.2020 00:17:54

Сквозняк писал(а):Запускаешь программу с путями содержащими неанглийские буквы и случается лажа при создании каталогов, загрузке и сохранению файлов.

У меня не случается. Даже с путями на иврите. Наверное, я что-то делаю не так... :mrgreen:
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Портирование проекта Windows -> Linux

Сообщение Сквозняк » 06.12.2020 12:58:57

Снег Север писал(а):
Сквозняк писал(а):Запускаешь программу с путями содержащими неанглийские буквы и случается лажа при создании каталогов, загрузке и сохранению файлов.

У меня не случается. Даже с путями на иврите. Наверное, я что-то делаю не так... :mrgreen:

Наверно пишешь не программы а хелловорды не вылезая из лазаруса.
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

Re: Портирование проекта Windows -> Linux

Сообщение Seenkao » 06.12.2020 13:39:29

А я тоже умею хелловорлды писать...
"Hello World!"
правильно хоть? :roll:
Seenkao
энтузиаст
 
Сообщения: 526
Зарегистрирован: 01.04.2020 03:37:12

Re: Портирование проекта Windows -> Linux

Сообщение Снег Север » 06.12.2020 13:40:45

Сквозняк писал(а):Наверно пишешь не программы а хелловорды не вылезая из лазаруса.

Говнокода со счетчиками бесконечных циклов точно не пишу. :mrgreen:
Основные рабочие проекты у меня на делфи. Но с путями я проверял на лазаре, причем кроссплатформенно, с комбинацией символов русского и иврита в путях, для большей надежности. Конечно, передача данных идет не через консоль и не через батники. Я не люблю секса в гамаке.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

Рейтинг@Mail.ru