У меня есть следующий код: PascalFPC Compile в качестве статической библиотеки
Library foo;
uses
ctypes;
procedure Dummy; cdecl;
begin
end;
exports
Dummy;
begin
end.
компилировать его в файл .o, я:
ppcrossx64.exe -Cn -CcCDECL -O2 -Xs -XS -Xt foo.pas
.
Он создает файл foo.o
и файл link.res
.
Затем я делаю ar -q foo.a foo.o link.res
для создания foo.a
. Однако, если я ссылаюсь на файл с GCC (ссылка на мою программу на C++), то символ Dummy
не найден.
FPC говорит, что это ссылка, совместимая с gcc. Почему я не могу найти символы? Что я делаю не так? Если я не укажу -Cn
, он скомпилирует его с .dll
, который работает. Однако мне нужна статическая библиотека.
Edit: Он также генерировать этот пакетный файл:
@echo off
SET THEFILE=C:\Users\Brandon\Desktop\foo.dll
echo Linking %THEFILE%
ld.exe -b pei-x86-64 --gc-sections -s --dll --entry _DLLMainCRTStartup --base-file base.$$$ -o C:\Users\Brandon\Desktop\foo.dll link.res
if errorlevel 1 goto linkend
dlltool.exe -S as.exe -D C:\Users\Brandon\Desktop\foo.dll -e exp.$$$ --base-file base.$$$
if errorlevel 1 goto linkend
ld.exe -b pei-x86-64 -s --dll --entry _DLLMainCRTStartup -o C:\Users\Brandon\Desktop\foo.dll link.res exp.$$$
if errorlevel 1 goto linkend
goto end
:asmend
echo An error occured while assembling %THEFILE%
goto end
:linkend
echo An error occured while linking %THEFILE%
:end
Двойной щелчок он создает .dll
файл, который работает.
Используйте bintools для проверки файла библиотеки foo.a и посмотреть, что он содержит. Вот как вы начинаете отлаживать такие проблемы. В противном случае вы будете работать слепыми. –
Он содержит файл .o и файл .res. – Brandon
А какие символы? –