Пример модуля (файл test.pas):
- Код: Выделить всё
unit test;
interface
implementation
procedure test1; alias :'test1';
begin
end;
end.
В принципе текст alias :'test1'; не особо нужен. Имя функции в объектном файле по умолчанию TEST_TEST1. Подробней см. Programmers Guide 6.2.3
далее компилируем этот юнит в обычном порядке:
fpc test.pas
В результате получаем файл test.o и при включенном смартлинке(рекомендую) libptest.a.
Далее берем маленький файл на ассемблере вызывающий нужную функцию и линкуем с ним. Но это уже зависит от того какой у вас ассемблер и какая ОС.
У меня as и FreeBSD. И мой файл (testmain.s):
- Код: Выделить всё
.text
.global _start
_start:
call test1 # можно так же call TEST_TEST1
# sys_exit
pushl $0
movl $1,%eax
pushl %eax
int $0x80
Компилируем его командой
as testmain.s -o testmain.o
И линкуем его
ld -s testmain.o libptest.a -o testmain
или
ld -s testmain.o test.o -o testmain
Полученный размер исполняемого файла у меня около 300 байт.
Вот такой вариант сборки если не нужны функции из модуля system и RTL. Это может пригодится если вы например хотите использовать функции из libc или только WinAPI.
В варианте для Linux необходимо изменить вызов int $0x80. Для Windows сейчас даже не скажу, но можете поискать на <a href='http://wasm.ru' target='_blank'>http://wasm.ru</a>.