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

Откуда: Тюмень
Сообщений: 893
Неужеди в лазарусе не могут сделать аналог делфовского paserver? тогда и прыгать между разными IDE не надо, и компиляция будет из родной ОС (раз уж в лазарусе проблемы сборки для чужых ОС)
20 ноя 21, 13:56    [22398303]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
Kazantsev Alexey
Member

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

paserver это средство деплоя и отладки, причём тут кросс-компиляция?
20 ноя 21, 14:30    [22398308]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
rgreat
Member

Откуда:
Сообщений: 7024
Kazantsev Alexey,

В том что без наличия нормального средства удаленного деплоя и отладки кросскомпиляция не шибко удобна.

Сообщение было отредактировано: 20 ноя 21, 14:32
20 ноя 21, 14:32    [22398310]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5302
rgreat
без наличия нормального средства удаленного деплоя и отладки кросскомпиляция не шибко удобна.

Удобство штука субъективная. Кому-то и не обвешенная плагинами IDE неудобна.

Сообщение было отредактировано: 20 ноя 21, 14:40
20 ноя 21, 14:39    [22398312]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
zedxxx
Member

Откуда:
Сообщений: 140
Kazantsev Alexey
zedxxx
И как выясняется, если из-под win64 билдить кросскомпилятор для win32 мы в итоге получаем эмуляцию Extended типа (которая работает медленно и не точно). И что на самом деле, всё надо делать ровно наоборот - ставить win32 компилятор и им билдить для win64.

А отключить софтовую эмуляцию в fpcupdeluxe пробовал?

Попробовал, компиляция кросс-компилятора завершается ошибкой:
fpcdefs.inc(382,2) Error: User defined: Cross-compiling from systems without support for an 80 bit extended floating point type to i386 is not yet supported at this time

В сорцах там вот такая заглушка стоит:
{$if not defined(FPC_HAS_TYPE_EXTENDED) and defined(i386)}
{$ifndef FPC_SOFT_FPUX80}
{$error Cross-compiling from systems without support for an 80 bit extended floating point type to i386 is not yet supported at this time }
{$endif}
{$endif}


Сообщение было отредактировано: 20 ноя 21, 15:56
20 ноя 21, 15:54    [22398332]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

Казалось бы: какая разница кросс-компилятору что там поддерживает хостовая
платформа, он же всё равно генерирует набор байт, который не будет на ней
исполняться...

Posted via ActualForum NNTP Server 1.5

20 ноя 21, 15:57    [22398334]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 893
Kazantsev Alexey
asutp2,

paserver это средство деплоя и отладки, причём тут кросс-компиляция?
Это я к тому, что утверждается о проблемах компиляции у лазаря в чужой ОС. Ок, раз есть такая проблема, так почему не запилить тулзу, которая устанавливается на целевой ОС и компиляция идет через нее?
20 ноя 21, 16:05    [22398337]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5302
zedxxx
Попробовал, компиляция кросс-компилятора завершается ошибкой

Хм, из-под линукса всё компилируется на ура.

zedxxx
И как выясняется, если из-под win64 билдить кросскомпилятор для win32 мы в итоге получаем эмуляцию Extended типа (которая работает медленно и не точно). И что на самом деле, всё надо делать ровно наоборот - ставить win32 компилятор и им билдить для win64.

Установил лазарь x64 на винду и собрал кросс-компилятор под Win32 (эмуляцию не отключал). Код с Extended компилируется в машинные команды, никакой эмуляции.
Твой код:
uses
  Math;

var
  D: Double;
  E: Extended;
begin
  D := Pi;
  Writeln(D);

  E := Pi;
  Writeln(E);

  Writeln('Double:   ', SizeOf(D) );
  Writeln('Extended: ', SizeOf(E) );
end. 

Результат кросс-компилятора для i386:

3.1415926535897931E+000
3.14159265358979323851E+0000
Double: 8
Extended: 10
21 ноя 21, 01:38    [22398510]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5302
Картинка с другого сайта.
21 ноя 21, 01:58    [22398514]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
zedxxx
Member

Откуда:
Сообщений: 140
Kazantsev Alexey,

Ну да, я в таком же удивлении. Надо разработчиков fpc спрашивать где и в каких случаях у них эмуляция происходит.
21 ноя 21, 08:28    [22398528]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
Док
Member

Откуда: Казань
Сообщений: 7217
Kazantsev Alexey
Док
могу попытаться собрать тестовый проект, если ситльно надо

Давай, хочу на это посмотреть.

Ты должен помнить, как я сетовал, что, если задавать размеры контрола в runtime (кнопки в моем случае) через GetPreferredSize, то на винде (где собираются нативно) они рисуются корректно, а на линуксе - нет.

Увы, на простеньком проекте не воспроизвелось. В прошлый раз (когда жаловался) кнопки в винде были квадратные, на линуксе - прямоугольные. Но там компонентов на форме была куча :(
21 ноя 21, 22:49    [22398825]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5302
Док
Ты должен помнить, как я сетовал, что, если задавать размеры контрола в runtime (кнопки в моем случае) через GetPreferredSize, то на винде (где собираются нативно) они рисуются корректно, а на линуксе - нет.

Я это помню (у тебя была проблема в том, что хендл едита не был инициализирован на момент запроса GetPreferredSize), только причём здесь кросс-компиляция? Ты же не думаешь, что собери ты этот код из-под линукса у тебя всё заработало бы?
21 ноя 21, 23:26    [22398836]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5302
Kazantsev Alexey
(у тебя была проблема в том, что хендл едита не был инициализирован на момент запроса GetPreferredSize)

Не совсем так, но сути это не меняет. Особенности виджетсетов отношения ко кросс-компиляции не имеют. Вот та тема.
22 ноя 21, 02:18    [22398853]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
Док
Member

Откуда: Казань
Сообщений: 7217
Kazantsev Alexey,

если я правильно помню, то для правильной отрисовки кнопки в приложении я должен был открыть сначала форму в дизайнере Лазаря. Если я просто кросскомпилил приложение и запускал на другой платформе, то кнопки рисовались неправильно. Так что, я правильно помню :)
23 ноя 21, 13:14    [22399643]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
Kazantsev Alexey
Member

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

Я же не просто так тебе писал про AutoSize. Ты пытаешься привязать размер кнопки к размеру едита. У едита выставлено свойство AutoSize - True. То есть, высота едита может меняться от платформы к платформе (и даже в рамках одной платформы). Теперь смотри что происходит. Ты дизайнишь гуй на винде, и лазарь сохраняет в lfm свойства компонентов. Свойства Left,Top,Width,Height не имеют дефолтных значений, поэтому сохраняются всегда, даже если у контрола AutoSize - True. Таким образом, на винде у тебя сохраняется дефолтная высота высота виндового едита. Далее, в событии OnCreate ты присваиваешь кнопкам высоту едита, но штука в том, что чтение позиции и размера контрола это просто чтение сохранённого значения (этой операции не достаточно для актуализации значения при установленном в истину AutoSize). Таким образом, на винде ты всё равно получаешь корректное значение, т.к. дизайнил тоже на винде и редактор сохранил дефолтное значение высоты виндового едита. Но на другой платформе, где высота едита может отличаться, у тебя не меняется размер кнопок (т.е. он меняется, но на сохранённый в lfm размер виндового едита) т.к. к моменту, когда ты читаешь свойства едита ещё не отработали механизмы актуализирующие размеры контрола. Когда ты открываешь форму на другой платформе, редактор перезаписывает размеры едитов и у тебя всё "начинает работать". Надеюсь, теперь понятно, что дело не в кросс-компиляции?
23 ноя 21, 14:43    [22399690]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
Док
Member

Откуда: Казань
Сообщений: 7217
Kazantsev Alexey
Док,

...лазарь сохраняет в lfm свойства компонентов

да, я про это совсем забыл :(
23 ноя 21, 14:51    [22399696]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
svd
Member

Откуда:
Сообщений: 223
так как работаю с git, то чаще компиляцию всех версий делал в командной строке.

Пример тут. Просто скопировал все возможные активные конфигурации в отдельный каталог, при запуске коммандного файла make_all.cmd тупо меняю конфигурацию и вызываю lazbuild.exe.
26 ноя 21, 11:29    [22401142]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus - Кроссплатформенность  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5302
svd
Просто скопировал все возможные активные конфигурации в отдельный каталог, при запуске коммандного файла make_all.cmd тупо меняю конфигурацию и вызываю lazbuild.exe.

Зачем это делать при наличии режимов сборки?

Сообщение было отредактировано: 26 ноя 21, 13:42
26 ноя 21, 13:42    [22401259]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
Все форумы / Delphi Ответить