Страница 1 из 2

Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 18:06:55
Seenkao
Как компилируемой программе указать принудительно, где будет стартовать программа?

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 20:30:14
скалогрыз
в той строчке кода, которая начинается с "begin" а заканчивается "end."
обычно файл с таким кодом должен начинатся с ключевого слова "program", но это не обязательно.

Но на самом деле, точка входа прикрыта RTL-ом. Потому что кроме прочего нужо же ещё и модули инициализировать.

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 20:59:52
Seenkao
скалогрыз, мне интересно, когда даже указано "принудительно" - это наверно всё же должно что-то значить?
Мне надо обойти проблему: entry point(start) undefined. Usually in crt1.o for architecture x86_64
"ткнуть ему (компилятору) пальцем" где у меня начинается программа, чтоб он мне выдал конкретную ошибку в программе.

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 21:07:12
скалогрыз
Seenkao писал(а):"ткнуть ему (компилятору) пальцем" где у меня начинается программа, чтоб он мне выдал конкретную ошибку в программе.

если "компилятор" дошёл до ошибки "entry point(start) undfined", то я думаю, что это проблема компоновщика (линкера).
лучше расскажи для какой системы ты компилируешь.

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 21:08:30
Seenkao
MacOS

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 21:14:54
скалогрыз
Seenkao писал(а):MacOS

версия макОСи какая? версия компилятора какая?

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 21:21:25
Seenkao
MacOS High Sierra
FPC 3.2.0
Lazarus 2.0.1
x86_64-darwin-cocoa

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 21:30:03
скалогрыз
попробуй такую Custom Option добавить к командной строке компилятора:
Код: Выделить всё
-WM10.8

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 21:44:52
Seenkao
Это не подошло, но натолкнуло на мысль. Скомпилировать удалось, только бесполезно, почему-то не всё скомпоновалось (надеюсь правильно написал).
файл вышел слишком малого размера... значит там не всё, ошибка при запуске.

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 21:49:41
скалогрыз
спрошу, ты же устанавливал Command Line tools от Xcode ?
Код: Выделить всё
xcode-select --install

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 21:55:15
Seenkao
как Lazarus установил, следом xcode, точнее то что ты написал. Xcode был уже установлен до этого.

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 22:36:20
скалогрыз
хорошо.
попробуй (из командной строки) скомпилировать и запустить
Код: Выделить всё
begin
  writeln('hello world');
end.

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 22:48:58
Seenkao
нет, мне надо именно моё, другое всё запускается.
А это значит, что где-то компиляция криво работает. Не так как я думаю (хотя я считаю что не так как надо :) ).

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 22:56:20
скалогрыз
Seenkao писал(а):нет, мне надо именно моё

технически "именно моё" это что? ... да, хотя какая разница.

берёшь запускаешь из терминала:
Код: Выделить всё
man ld

в мануале будет сказано как указать точку входа для компоновщика.
(гугление показывает что это "-e" параметр с последующим именем символа)

После этого, значение этого параметра тебе нужно передать через fpc. С помощью Лазаруса это делается легко. Project Options -> Compilation and Linking -> Linking
ставишь тычку в "pass options to linker" а в едите-ниже пишешь
Код: Выделить всё
-e mySuperStart

и вроде бы всё!

Re: Точка входа в программу. Принудительно.

СообщениеДобавлено: 05.11.2020 23:07:50
Seenkao
Благодарю, но попробую попозже.

Добавлено спустя 11 часов 55 минут 30 секунд:
Запустил, но сразу закрывается. Теперь буду искать конфликты...

Оказалось проще всего запустить вообще без параметров линковщика (в Lazarus-е).