Forum > Russian

QT-Лазарус: установка

<< < (2/3) > >>

zoltanleo:

--- Quote from: tetrastes on December 19, 2022, 10:18:31 pm ---Насчет "немного странных предупреждений" от fpcupdeluxe. Вообще-то лучше им следовать и не кросс-компилировать с win64, см. например https://forum.lazarus.freepascal.org/index.php/topic,59889.msg447738.html#msg447738.
Да и зачем кросс-компилировать с win64 на win32, если можно использовать родной ppc386.exe, что, кстати, и делается в официальном дистрибутиве Лазаруса.

--- End quote ---

Вообще-то, в этом топике речь идёт про qt.

Но, раз уж зашла речь про кросскомпиляцию, то:
1. В статье просто описывается процесс, а уж зачем все это делать - каждый решает сам. Например, я собираю сразу под вин 32/64, линукс 32/64, Дарвин. И мне проще сделать это простым переключением опций в среде (неважно, какой битности она собирает проект по умолчанию)
2. Касаемо готового ppc386.exe - думаю, большинству не очень захочется заморачиваться, где его достать и как настроить, чтобы получить 32-битный компилятор с настроенным окружением.

Как-то так...

tetrastes:

--- Quote from: zoltanleo on December 20, 2022, 07:47:51 am ---Вообще-то, в этом топике речь идёт про qt.

--- End quote ---
Ну просто я дочитал Вашу ссылку до конца...


--- Quote from: zoltanleo on December 20, 2022, 07:47:51 am ---Но, раз уж зашла речь про кросскомпиляцию, то:
1. В статье просто описывается процесс, а уж зачем все это делать - каждый решает сам. Например, я собираю сразу под вин 32/64, линукс 32/64, Дарвин. И мне проще сделать это простым переключением опций в среде (неважно, какой битности она собирает проект по умолчанию)

--- End quote ---

В том-то и дело, что важно (точнее важно, какой битности кросс-компиляторы). 64-битные кросс-компиляторы с win64 могут сгенерировать бинарник не такой, скажем так, как ожидалось, а может и вообще с ошибками. Может, Вы и готовы рискнуть, но других надо хотя бы предупредить, что и делает fpcupdeluxe.
Поэтому я и написал свой пост, хоть это и оффтопик, согласен.

zoltanleo:
Если я правильно вас понял и кто-то собирает 64-битный кросскомпилятор в нативном 64-битном компиляторе, а потом получает какие-то ошибки, то что тут сказать?  :o

Возникает вопрос: зачем? Если по умолчанию в опциях проекта выставлены по дефолту ЦПУ и таргет, то собираемое приложение будет соответствовать разрядности/ОСи. Зачем его дублировать, чтобы потом получать ошибки? В чем цимес?

tetrastes:
Нет, Вы меня не правильно поняли.
Вы используете fpcupdeluxe для x86_64-win64 для установки кросс-компиляторов. Сначала fpcupdeluxe компилирует 64-битные fpc.exe и ppcx64.exe, потом 64-битные кросс-компиляторы (ppcross386.exe для i386, ppcross-что-то-там для linux и darwin x86_64). Так вот эти кросс-компиляторы и будут давать бинарники, отличающиеся от бинарников, полученных нативными компиляторами, потому что эти платформы поддерживают extended (80-bit floating point), a x86_64-win64 - нет. В лучшем случае при исполнении Вы будете иметь не то, что ожидали, в худшем - ошибки.

Раз уж мы сбились на оффтопик, приведу простейший пример:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---program project1; begin  writeln('SizeOf(3.1) = ', SizeOf(3.1));   // 3.1 хранится как extended на платформах,                                            // поддерживающих extended. Проверим это  writeln(3.1);  writeln(double(3.1));         // Для сравнения точности  readln;end. Заметьте, я нигде не использую extended явно.

Результат компиляции 32-битным ppc386.exe:
 SizeOf(3.1) = 10
  3.09999999999999999991E+0000
  3.1000000000000001E+000 

Результат компиляции 64-битным ppcross386.exe: 
SizeOf(3.1) = 10
 3.10000000000000008882E+0000
 3.1000000000000001E+000

Хоть хранится как extended, но точность фактически double.
Вот Вам результат, который не ожидали (а может и ошибка, в зависимости от требований к программе).
В заключение замечу, что многие функции из RTL используют extended.                                                                                       

zoltanleo:
Ага, теперь ясно. Спасибо за разъяснения  :)

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version