- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将 FPC .o
从库链接到 Delphi 可执行文件。当我尝试链接以下代码时,我收到一堆不满意的前向或外部声明。
library project1;
{$mode objfpc}{$H+}
uses
Classes
{ you can add units after this };
function Test: Integer;
begin
Result := -1;
end;
begin
end.
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'INIT$_$SYSTEM'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'FINALIZE$_$OBJPAS'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'INIT$_$LNFODWRF'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'FINALIZE$_$LNFODWRF'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'INIT$_$FPINTRES'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'FINALIZE$_$WINDIRS'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'SYSUTILS$_$TENCODING_$__$$_create'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'SYSUTILS$_$TENCODING_$__$$_destroy'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'INIT$_$SYSUTILS'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'FINALIZE$_$SYSUTILS'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'INIT$_$TYPINFO'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'FINALIZE$_$TYPINFO'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'INIT$_$CLASSES'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'FINALIZE$_$CLASSES'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'THREADVARLIST_$SYSTEM'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'THREADVARLIST_$CLASSES'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'RESSTR_$RTLCONSTS_$$_START'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'RESSTR_$RTLCONSTS_$$_END'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'RESSTR_$SYSCONST_$$_START'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'RESSTR_$SYSCONST_$$_END'
[dcc64 Error] Project2.dpr(170): E2065 Unsatisfied forward or external declaration: 'FPC_LIBINITIALIZEUNITS'
最佳答案
你不太可能完成这项工作,至少按照书面说明是这样。不满意的声明来自 FPC 运行时。您也需要链接它,或者在 Delphi 中重新实现它。这两种选择都不太可行。
当然,如果您删除了对 Classes 单元的引用,并将这个简单的函数放在单独的代码单元而不是库单元中,那么可能不会出现不满足的声明。也就是说,您肯定正在探索这一点,因为您想要使用实际执行某些操作的 FPC 代码。一旦你这样做了,你就会回到最初的状态。
解决这个问题的方法是动态链接到 FPC 代码。将 FPC 代码编译到库中并动态链接到该库。
<小时/>只是为了好玩,我尝试将 FPC 对象链接到 Delphi 程序。 FPC单元:
unit unit1;
interface
implementation
function Test(i: Integer): Integer; cdecl;
begin
Test := i*42;
end;
end.
我编译了这个:
fpc unit1.pp
Then I wrote the following Delphi program to link it:
{$APPTYPE CONSOLE}
{$L 'unit1.o'}
function Test(i: Integer): Integer; cdecl;
external name 'UNIT1_TEST$SMALLINT$$SMALLINT';
begin
Writeln(Test(666));
end.
输出:
27972
请注意,函数名称已被修饰。为了找到名称,我使用了 objdump:
>objdump -d unit1.ounit1.o: file format pe-i386Disassembly of section .text.n_unit1_test$smallint$$smallint:00000000 : 0: 55 push %ebp 1: 89 e5 mov %esp,%ebp 3: 83 ec 04 sub $0x4,%esp 6: 0f bf 45 08 movswl 0x8(%ebp),%eax a: 6b c0 2a imul $0x2a,%eax,%eax d: 66 89 45 fc mov %ax,-0x4(%ebp) 11: 66 8b 45 fc mov -0x4(%ebp),%ax 15: c9 leave 16: c3 ret ...
我使用 x86 版本的编译器完成了这项工作。我希望它在 x64 下也可行。
因此,您确实可以链接 FPC 目标文件,只要它们足够简单。然而,如果您需要任何 FPC 运行时和标准单元,那么我预计它会变得太难。
关于delphi - 将 FPC .o 文件链接到 Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22041506/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!