Моя raspberry Pi 3 неработоспособна (на плате отпаялся, повиснув на ниточке, конденсатор, и после каждого выключения файловая система оказывается битая, приходится втыкать карточку в линуксовый писюк и лечить fsck ). Мне теперь надо купить новую, а жаба не даёт это сделать, не попытавшись эту заразу припаять обратно - хотя и так видно, что бесполезно: конденсатор - не больше крупинки сахара.
Достал с пыльной полки такую древность, как Raspberry Pi 2 (в комплекте: Raspbian 8, fpc 2.6.4, Lazarus 1.2.4, все свежаки 14 года) и попробовал собирать на ней. Бился с отладкой лбом об стенку пока не осознал одну простую истину: нельзя ставить оптимизацию выше -O1.
Потому что уже при -O2 компилятор начинает выкидывать как якобы ненужные вызовы процедур, которые результат своей работы пишут по указателям, полученным через тайпкасты. И всё логирование ошибок идёт фтопку.
Конкретный пример:
-O2
Нет самого главного сообщения, которое позволяет понять, что и почему (лечится вставлением пустого writeln; в одну из служебных процедур, вызываемых из специфической Die() - но откуда я знаю, *что ещё* жизненно важного оптимизатор выкинул?)
================== Error message: ==================
Failed to load the module lib_hub-armv7l.so.
Call stack:
cl_module.inc:357 (TModule___LoadMeDll) in chentrah-armv7l
cl_module.inc:123 (TModule__Load) in chentrah-armv7l
cl_module.inc:610 (TModule__Pulse) in chentrah-armv7l
framework_basic.pp:410 (TBasicFramework__Pulse) in chentrah-armv7l
cl_main.inc:448 (Run) in chentrah-armv7l
chentrah.lpr:99 ($main) in chentrah-armv7l
====================================================
-O1 -OoCSE -OoTAILREC -OoLOOPUNROLL
Всё работает как положено:
================== Error message: ==================
Failed to load the module lib_hub-armv7l.so.
dlopen() returned NULL
(/home/cheb/raid2000/chentrah/temporary-files/bin/lib_hub-armv7l.so: undefined symbol: TC_SYSTEM_ISLIBRARY)
Call stack:
cl_module.inc:357 (TModule___LoadMeDll) in chentrah-armv7l
cl_module.inc:123 (TModule__Load) in chentrah-armv7l
cl_module.inc:610 (TModule__Pulse) in chentrah-armv7l
framework_basic.pp:410 (TBasicFramework__Pulse) in chentrah-armv7l
framework_basic.pp:560 (TBasicFramework__MainThreadMainLoop) in chentrah-armv7l
cl_main.inc:448 (Run) in chentrah-armv7l
chentrah.lpr:99 ($main) in chentrah-armv7l
76C91294h in libc.so.6
====================================================
Добавлено спустя 12 часов 19 минут 13 секунд:.. а фри паскаль 2.6.4 мне вдруг говорит человечьим голосом:
Здесь кончаются края, мне на веки верные,
Распрощаемся, друзья, здесь на веки вечные!
..короче, не умеет он генерировать не битые DLL для платформы armhf.
Ставлю на вторую малину наипоследнейший распбиан.
ИЧСХ - встаёт, собака!
Значит, с точки зрения софта вторая и третья вполне себе совместимые.
Добавлено спустя 7 часов 6 минут 17 секунд:Собралось, запустилось. UPX воротит нос от моей дллы: "убери от меня эту бяку, она не PIC". Фпц 3.0.0 забивает на команду -Cg большой и толстый. Ну, хоть так работает.
Попутно полезли странные глюки (очень похоже, длла пытается загрузить функции OpenGL, хотя ясно сказано: GL ES!) и со строками в бектрейсах как-то совсем не весело.
Но это ладно, обнаружилась ещё засада:
Распбиан сейчас - с заводскими настройками, включающими толстые рамочки по краям экрана (для любителей старины, вестимо, чтобы аналоговый вывод на телевизор через S-Video нормально работал). Так вот, оказалось, что аппаратный сурфейс создаётся в абсолютных координатах физического экрана, игнорируя эти рамочки. Но иксы-то работают, считая, что экран на них только начинается! В результате, 3d вывод съезжает налево вверх, визуально перекрывая заголовок окна. Причём, у Minecraft Pi та же байда:
Лол.
Не знаю даже, стоит ли это пытаться чинить или забить на это.
Добавлено спустя 16 часов 31 минуту 53 секунды:.. в общем, продолжу осенью. Сейчас на работе слишком плотно чтобы ещё на движке уматываться, да и два фанфика недописанных висят!
Для возвращения к статус кво (вращающемуся кубику) надо:
- догрести перелопачивание отрисовки текста
- реорганизовать разбросанный по всему коду зоопарк условий типа glBlend туда, glAlphaTest сюда в централизованный менеджер шейдеров
- домучить оконный менеджер для X11, чтоб работали полноэкранный режим и захват мыши