MacOS上的 Delphi +ZeosLib+Firebird

apeeds0o  于 12个月前  发布在  Mac
关注(0)|答案(1)|浏览(158)

我试图在我的macOS应用程序上使用ZeosLib,该应用程序在Windows上工作,我现在试图将其适应macOS,但当它启动时,它给了我以下错误:
找不到任何动态库或没有找到任何动态库:libcrypt.dll.25、libfbembed.dll.25、libfbclient.dll.25、libcrypt.dll.21、libfbembed.dll.21、libfbclient.dll.20、libfbembed.dll.20、libfbclient.dll.20、libfbclient.dll.2、libfbembed.dll.15、libfbclient.dll.15、libfbclient.dll.15、libcrypt.dll、libfbembed.dll、libfbclient.dll、libcrypt.dll,libgds32.dll,libgds.dll!
如果位置无效,请使用TZConnection.LibraryLocation。
在哪里可以找到这些DLL文件?
这是导致错误的代码(是的,我需要TFDConnection和TZConnection):

unit MainDB;

interface

uses
  System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option,
  FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf,
  FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, FireDAC.UI.Intf,
  FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Phys, FireDAC.Phys.FB,
  FireDAC.Phys.FBDef, FireDAC.FMXUI.Wait, Data.DB, FireDAC.Comp.Client,
  FireDAC.Comp.DataSet, FireDAC.Phys.IBBase, ZAbstractRODataset,
  ZAbstractDataset, ZDataset, ZAbstractConnection, ZConnection;

type
  TMDB = class(TDataModule)
    FDConnection2: TFDConnection;
    FDQuery2: TFDQuery;
    DocConnection: TZConnection;
    FDQuery1: TZQuery;
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MDB: TMDB;

implementation

{%CLASSGROUP 'FMX.Controls.TControl'}

{$R *.dfm}

procedure TMDB.DataModuleCreate(Sender: TObject);
begin
  //DocConnection.LibraryLocation := '/Library/Frameworks/Firebird.framework/Versions/A/Libraries';
  FDConnection2.Params.Add('Database='+ExtractFilePath(ParamStr(0))+'DATA.FDB');
  FDConnection2.Connected := True;
  DocConnection.Database := ExtractFilePath(ParamStr(0))+'DATA.FDB';
  DocConnection.Connected := True;
end;

end.

字符串

7lrncoxx

7lrncoxx1#

错误消息不是
找不到任何动态库或没有找到任何动态库:libcrypt.dylib.25、libcrypt.dylib、libcrypt.dylib!如果位置无效,请使用TZConnection.LibraryLocation。
令人惊讶!尝试一下如果您禁用Zeos.inc底部附近的INTERBASE_PROPT定义会发生什么

{.$DEFINE INTERBASE_CRYPT}

字符串
重新编译zeos组件,看看会发生什么。
如果未解决,则:
根据您使用的ZEOSLib版本,可能还有 Delphi 版本
看看. ZeosLib\src\plain\ZPlainFirebirdInterbaseDriver.pas你会发现一些常量照顾火鸟版本

WINDOWS25_DLL_LOCATION   = 'fbclient25.dll';
  WINDOWS25_DLL_LOCATION_EMBEDDED = 'fbclientd25.dll';
  LINUX25_DLL_LOCATION   = 'libfbclient'+SharedSuffix+'.25';
  LINUX25_DLL_LOCATION_EMBEDDED = 'libfbembed'+SharedSuffix+'.25';
  LINUX25_IB_CRYPT_LOCATION = 'libcrypt'+SharedSuffix+'.25';


你可以修改这些LINUXxx_DLL的位置(不推荐)
或者理解“Sharedsuffix”(在. ZeosLib\src\core\Zerubility.pas中),或者

{$IFDEF WINDOWS}
const SharedSuffix='.dll';
 {$ELSE}
  {$IFDEF DARWIN}
   const SharedSuffix='.dylib';
   {$ELSE}
     {$IFDEF UNIX}
       const SharedSuffix='.so';
    {$ELSE}
      const SharedSuffix='.dll'; //Delphi
    {$ENDIF}
  {$ENDIF}
 {$ENDIF}


我猜这个达尔文def不是一个 Delphi 指令(Lazarus?)应该是MACOS?另一个解决方案是编辑ZCore.inc在... ZeosLib\src\core目录中,并添加

{$IFDEF MACOS}
   {$DEFINE DARWIN}
   {$DEFINE LINUX} // not sure of that 
{$ENDIF}


重新编译zeos组件,看看会发生什么(我没有苹果硬件测试)

相关问题