fpc:PPU 来源:[unit].pas 不可用

fpc: PPU Source: [unit].pas not available

我正在尝试使用 Free Pascal 编译器版本 3.0.4 [2018/10/02] 为 x86_64 在 macOs Mojave 上编译以下最小的 FreeVision 程序。

Program VeryShort;
Uses App;

Var MyProgram: TApplication;

Begin
    MyProgram.Init;
    MyProgram.Run;
    MyProgram.Done;
End.

但是,我收到以下错误消息:

$ fpc veryshort.p
Free Pascal Compiler version 3.0.4 [2018/10/02] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Darwin for x86_64
Compiling veryshort.p
PPU Loading /usr/local/Cellar/fpc/3.0.4_1/lib/fpc/3.0.4/units/x86_64-darwin/fv/app.ppu
PPU Source: app.pas not available
PPU Source: platform.inc not available
Recompiling App, checksum changed for Menus
veryshort.p(2,6) Fatal: Can't find unit App used by VeryShort
Fatal: Compilation aborted
Error: /usr/local/bin/ppcx64 returned an error exitcode

单元文件app.ppu被编译器找到了,所以我不明白为什么要重新编译它?

使用编译器的 -vut 选项,我发现 fpc 选择了一个不正确的单元作为依赖项:在两个位置有一个 menus.ppu 单元:

  • lib/fpc/3.0.4/units/x86_64-darwin/fv/menus.ppu
  • lib/fpc/3.0.4/units/x86_64-darwin/univint/Menus.ppu.

不幸的是,univintfv之前的单元搜索路径上,因此拾取了错误的单元。

我通过在命令行上明确指定 FreeVision 的路径解决了这个问题:这样,FreeVision 单位是首选,但仍然可以找到所需的 univint 单位:

$ fpc -Fu/usr/local/lib/fpc/3.0.4/units/x86_64-darwin/fv veryshort.p

请注意,-Fu 和路径之间必须 而不是 是 space。路径名可能需要适配fpc版本、目标架构和操作系统。