Ich habe folgenden Pascal Code:FPC Compile als Static Library
Library foo;
uses
ctypes;
procedure Dummy; cdecl;
begin
end;
exports
Dummy;
begin
end.
Um es auf eine .o-Datei zu kompilieren, ich mache:
ppcrossx64.exe -Cn -CcCDECL -O2 -Xs -XS -Xt foo.pas
.
Es erstellt eine foo.o
und eine link.res
Datei.
Dann mache ich ar -q foo.a foo.o link.res
, um zu erstellen. Wenn ich jedoch mit der Datei mit GCC verlinke (Verknüpfung mit meinem C++ - Programm), Dummy
Symbol nicht gefunden.
FPC sagt, dass es Link-kompatibel mit Gcc ist. Warum kann ich die Symbole nicht finden? Was mache ich falsch? Wenn ich -Cn
nicht spezifiziere, kompiliert es es zu einem .dll
, der funktioniert. Ich brauche jedoch eine statische Bibliothek.
Edit: Es ist auch diese Batchdatei zu erzeugen:
@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
Doppelklick auf sie erstellt eine .dll
Datei, die funktioniert.
Verwenden bintools die Bibliotheksdatei foo.a inspizieren und sehen, was es enthält. So fangen Sie an, solche Probleme zu debuggen. Ansonsten arbeitest du blind. –
Es enthält die O-Datei und die RES-Datei. – Brandon
Und welche Symbole? –