Компоновка объектного файла

На верх  Назад  Вперёд

Объявив внешнюю функцию или переменную, которая расположена в объектном файле, вы можете использовать её, как если бы она была объявлена в вашей собственной программе или модуле. Для получения исполняемого файла вы ещё должны скомпоновать объектный файл. Это можно сделать с помощью директивы {$L file.o}.

Это приведёт к тому, что компоновщик будет ссылаться на объектный файл file.o. На большинстве систем это имя чувствительно к регистру. Поиск объектного файла сначала выполняется в текущей директории, а затем в директориях, указанных в командной строке директивой -Fo.

Вы не можете определить библиотеки таким способом, это только для объектных файлов.

Далее мы покажем пример. Будем считать, что у нас есть некоторая ассемблерная подпрограмма, которая использует соглашения о вызовах C и вычисляет n-е число Фибоначчи:

.text
     .align 4
.globl Fibonacci
.type Fibonacci, @function
Fibonacci:
     pushl %ebp
     movl %esp, %ebp
     movl 8(%ebp), %edx
     xorl %ecx, %ecx
     xorl %eax, %eax
     movl $1, %ebx
     incl %edx
loop:
     decl %edx
     je endloop
     movl %ecx, %eax
     addl %ebx, %eax
     movl %ebx, %ecx
     movl %eax, %ebx
     jmp loop
endloop:
     movl %ebp, %esp
     popl %ebp
     ret

Затем мы можем вызвать эту функцию в следующей программе на Pascal:

Program FibonacciDemo;
var i : longint;
Function Fibonacci (L : longint):longint; cdecl; external;
{$L fib.o}
begin
  For I:=1 to 40 do
    writeln('Fib(',i,') : ', Fibonacci(i));
end.

Только с двумя командами, которые могут быть выполнены в программе:

as -o fib.o fib.s

ppc386 fibo.pp

Это пример предполагает, что у вас есть ассемблерная подпрограмма в fib.s, а ваша программа на Pascal находится в файле fibo.pp.