FPC编译为静态库

布兰登

我有以下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.olink.res文件。

然后我做ar -q foo.a foo.o link.res创造foo.a但是,如果我使用GCC链接到文件(与我的C ++程序链接),则Dummy找不到符号。

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文件。

马可·范·德·沃特

我玩了一点,显然您需要声明它为export或我们的公共名称(如果您同时需要变形和非变形符号,则需要使用公共别名)

unit xx;
interface

uses
  ctypes;

procedure Dummy; cdecl;export;

implementation
procedure Dummy; cdecl; 

begin
end;


begin
end.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

编译为静态和动态库

来自分类Dev

将 C++ 代码编译为静态库 (.a)

来自分类Dev

使用Android NDK将共享库和静态库编译为共享库

来自分类Dev

如何在Ubuntu Linux上将C ++ REST SDK编译为静态库?

来自分类Dev

将GWT库编译为JavaScript库

来自分类Dev

交叉编译为静态lib(libgcrypt)以在iOS上使用

来自分类Dev

将仅使用常量的静态javascript函数编译为常量

来自分类Dev

使用Altera Quartus II将* .vhdl编译为库

来自分类Dev

libtool不要将Fortran编译为共享库

来自分类Dev

如何将特定的Boost库编译为DLL

来自分类Dev

Xcode尝试将Objective-C库编译为Swift

来自分类Dev

如何将libusb编译为共享库?

来自分类Dev

我可以反编译x86库,然后将其编译为ARM吗?

来自分类Dev

如何用静态库编译gcc?

来自分类Dev

交叉编译armhf并安装静态库

来自分类Dev

如何编译静态OpenCV4库?

来自分类Dev

交叉编译armhf并安装静态库

来自分类Dev

如何用静态库编译gcc?

来自分类Dev

如何使用 Codelite 11.0.0 编译静态库?

来自分类Dev

Pyinstaller编译为exe

来自分类Dev

代号One(或ParparVM)如何将Java库编译为iOS库

来自分类Dev

编译,静态初始化和静态库的问题

来自分类Dev

使用Java库将.class文件反编译为.java源代码

来自分类Dev

如何使用库导入将C文件编译为Webassembly文件(Emscripten)

来自分类Dev

如何将Github源代码/存储库编译为apk文件?

来自分类Dev

是否可以将Xamarin项目编译为iOS和Android的库?

来自分类Dev

用 Swift 代码包装一个 C++ 库,编译为 Cocoa Touch 框架

来自分类常见问题

将Python编译为WebAssembly

来自分类Dev

将Kotlin编译为JavaScript