Gcc FPC编译为静态库

Gcc FPC编译为静态库,gcc,linker,freepascal,Gcc,Linker,Freepascal,我有以下Pascal代码: 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-qfoo.afoo.o link.res来创建foo.a。但是,如果我用GCC链接到文件(与我

我有以下Pascal代码:

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-qfoo.afoo.o link.res
来创建
foo.a
。但是,如果我用GCC链接到文件(与我的C++程序链接),<代码>虚构< /代码>符号没有找到。 FPC说它与gcc是链接兼容的。为什么我找不到符号?我做错了什么?如果我没有指定
-Cn
,它会将它编译成一个
.dll
,它可以工作。但是,我需要一个静态库

编辑:它还生成此批处理文件:

@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

文件。

我玩了一点,您需要声明它或我们(或公共别名,如果您想要损坏和未损坏的符号)


我玩了一点,appparently您需要声明它或我们(或者公共别名,如果您想要损坏和未损坏的符号)


使用bintools检查库文件foo.a并查看其中包含的内容。这就是开始调试此类问题的方式。否则,您将盲目工作。它包含.o文件和.res文件。
0000000000000000 T P$FOO\u$$\ u DUMMY
和其他一些文件。问题似乎是名称混乱。不要将库用于静态库。只需编译一个单元,使用bintools检查库文件foo.a,看看它包含什么。这就是开始调试此类问题的方式。否则,您将盲目工作。它包含.o文件和.res文件。
0000000000000000 T P$FOO\u$$\ u DUMMY
和其他一些文件。问题似乎是名称混乱。不要将库用于静态库。只需编译一个单元。这会更好,因为名称不会弄乱。然而,我刚刚发现我不能用FPC或Lazarus构建静态库={好吧,这是非常负面的,但它确实不是一个预先准备好的轨道,所以你可能需要研究一些事情,比如如何链接+集成RTL,设置内存管理器和挂钩启动代码。我尝试了这个:没有雪茄。效果不太好。这更好,因为名称没有损坏。然而,我刚刚发现我无法构建静态库带FPC或Lazarus的ies={好吧,这是非常负面的,但它确实不是预先准备好的轨道,所以你可能需要研究一些事情,比如如何链接+集成RTL,设置内存管理器和挂钩启动代码。我尝试了这个:没有雪茄。效果不太好。
unit xx;
interface

uses
  ctypes;

procedure Dummy; cdecl;export;

implementation
procedure Dummy; cdecl; 

begin
end;


begin
end.