J'ai le code Pascal suivant:CPF Compile comme bibliothèque statique
Library foo;
uses
ctypes;
procedure Dummy; cdecl;
begin
end;
exports
Dummy;
begin
end.
Pour compiler dans un fichier .o, je fais:
ppcrossx64.exe -Cn -CcCDECL -O2 -Xs -XS -Xt foo.pas
. Il crée un foo.o
et un fichier link.res
. Puis, je fais ar -q foo.a foo.o link.res
pour créer foo.a
. Toutefois, si je lier au fichier avec GCC (lien avec mon programme C++), le symbole Dummy
est introuvable. FPC dit que c'est un lien compatible avec gcc. Pourquoi je ne trouve pas les symboles? Qu'est-ce que je fais mal? Si je ne spécifie pas -Cn
, il le compile à un .dll
qui fonctionne. Cependant, j'ai besoin d'une bibliothèque statique.
Edit: Il génère également ce fichier batch:
@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
Double clic crée un fichier .dll
qui fonctionne.
Utilisez bintools pour inspecter le fichier de bibliothèque foo.a et voyez ce qu'il contient. C'est ainsi que vous commencez à déboguer de tels problèmes. Sinon, vous travaillez aveugle. –
Il contient le fichier .o et le fichier .res. – Brandon
Et quels symboles? –