Linker 在Freepascal中创建静态链接库

Linker 在Freepascal中创建静态链接库,linker,static-libraries,freepascal,fpc,Linker,Static Libraries,Freepascal,Fpc,我计划写一个FPC库,可以链接到其他编译器。动态链接。因此,.dll不是问题,但是,至少从gcc和/或clang进行静态链接的要求已经提出 不知何故,最后,我需要一个包含所有FPC内部函数的对象归档,对吗?链接到libc cmem、cthreads等而不是FPCs实现似乎是一项要求,但实现这一点最有效和跨平台的方法是什么 所使用的FPC为2.7trunk 提前谢谢 编辑:德国已经取得了一些进展,在我的评论中也看到了相关的回购协议,但我觉得它既不优雅也不简单。还有Marco提出的关于初始化/终结的

我计划写一个FPC库,可以链接到其他编译器。动态链接。因此,.dll不是问题,但是,至少从gcc和/或clang进行静态链接的要求已经提出

不知何故,最后,我需要一个包含所有FPC内部函数的对象归档,对吗?链接到libc cmem、cthreads等而不是FPCs实现似乎是一项要求,但实现这一点最有效和跨平台的方法是什么

所使用的FPC为2.7trunk

提前谢谢


编辑:德国已经取得了一些进展,在我的评论中也看到了相关的回购协议,但我觉得它既不优雅也不简单。还有Marco提出的关于初始化/终结的问题…

好吧,理论上,您将每个.o与AR链接在一起,然后在启动时调用FPC_INITIALIZEUNITS,在关闭时调用FPC_INITIALIZEUNITS


然而,FPC可能会生成一些信息,比如一个包含main模块中所有单元ini/fin例程地址的表。我不能很快想出解决这个问题的办法。

我也遇到过类似的问题,发现确实很有帮助。它基本上是为iOS开发而编写的,这听起来要复杂得多,但对于常规的C/C++链接来说效果相当不错

在我的例子中,一个遗留的Delphi项目用于创建静态库:

fpc -Cn -Mdelphi xxx.dpr
ar -q libxxx.a `grep "\.o$" link.res`
ranlib libxxx.a

FPC_初始化单元的优点。我已经更新了原来的问题,同时我也取得了一些进展,但我认为我们完全忽略了这一点。关于只为完整构建生成代码的说法你是对的,我们通过构建一个库,然后使用主对象从中提取一些部分来解决这个问题。但这不是最好的解决办法。