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

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

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

wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

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

Сообщение wwswowsogon »

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

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

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

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

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

P. S. Ещё в проекте часто используется модуль windows, в основном, для всякого типа ShellExecute.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Возможно ShellExecute придется заменять на платформонезависимый TProcessUTF8
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Проблемы будут только в случае использования сторонних вин-онли компонентов
olegy123
долгожитель
Сообщения: 1643
Зарегистрирован: 25.02.2016 11:10:20

Сообщение olegy123 »

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

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

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

тут проблем тоже нет, все аналогично, за исключением разделителя папок в path.
Но есть маленькая особенность - программы запускаемые от родительской программы принадлежат ей. Если родительская программа завершается - то завершаются все дочерние. Исключение - fork() -нутые.
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

Сообщение wwswowsogon »

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

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


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

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


Нуу, это вообще не проблема. :)
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

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

Будет то, что что этот [censored] линух не будет их использовать. Я на такое нарывался не раз. За что линухи терпеть ненавижу.
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

Сообщение wwswowsogon »

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

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


Ха-ха, спасибо, что предупредили. :) Буду знать наперёд. :)
Сквозняк
энтузиаст
Сообщения: 1159
Зарегистрирован: 29.06.2006 22:08:32

Сообщение Сквозняк »

Снег Север писал(а):
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 $*
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

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

А на винде не надо никаких танцев с бубном - программа всегда приоритетно берет те библиотеки, которые лежат рядом с исполняемым файлом.
Seenkao
энтузиаст
Сообщения: 578
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

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

Если ты указал внутри программы свою папку, то тоже самое и в Linux будет.
Сквозняк
энтузиаст
Сообщения: 1159
Зарегистрирован: 29.06.2006 22:08:32

Сообщение Сквозняк »

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

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

Это мелочи по сравнению с виндовой дрочильней на кодировки. Запускаешь программу с путями содержащими неанглийские буквы и случается лажа при создании каталогов, загрузке и сохранению файлов. А всё потому что посылаемые в неё данные перекодируются. Эти идиоты не допёрли перекодировать только то, что в консоль вводят ручками и копипастой мышки, а то что вводит программа как команды - не трогать. Несколько дней потратил чтобы набрутфорсить нормальную работу программы с русскими буквами в путях в семёрке и десятке.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

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

У меня не случается. Даже с путями на иврите. Наверное, я что-то делаю не так... :mrgreen:
Сквозняк
энтузиаст
Сообщения: 1159
Зарегистрирован: 29.06.2006 22:08:32

Сообщение Сквозняк »

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

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

Наверно пишешь не программы а хелловорды не вылезая из лазаруса.
Seenkao
энтузиаст
Сообщения: 578
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

А я тоже умею хелловорлды писать...
"Hello World!"
правильно хоть? :roll:
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

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

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