0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Lazarus(on Windows)でLinuxアプリをコンパイルしようとして諦めた話

Posted at

はじめに

前回、Windows10上にLazarusをインストールしまして、さぁLinuxアプリをつくってみよう、、、と思ったのですが。。。

結論から言うと、Windows上でLinuxアプリのコンパイルはややこしそうなので一旦諦めることにしました。

私が今回やりたいことは、Object Pascalで作ったLinuxアプリをマネージドKubernetes上で動かすなのですが、Windows上でのクロスコンパイルにこだわる必要がないので、あまり深追いはしないでおこうと思ったためです。(Linux環境でLazarusを動かせるみたいなので)

経緯

まず、コンソールアプリケーションのプロジェクトを作成しました。

File > New...を選択
image.png

Project > Console applicationを選択
image.png

クラス名とタイトルを適当に設定します。
image.png

すると、下のようなコードが自動生成されます。

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes, SysUtils, CustApp
  { you can add units after this };

type

  { TSample }

  TSample = class(TCustomApplication)
  protected
    procedure DoRun; override;
  public
    constructor Create(TheOwner: TComponent); override;
    destructor Destroy; override;
    procedure WriteHelp; virtual;
  end;

{ TSample }

procedure TSample.DoRun;
var
  ErrorMsg: String;
begin
  // quick check parameters
  ErrorMsg:=CheckOptions('h', 'help');
  if ErrorMsg<>'' then begin
    ShowException(Exception.Create(ErrorMsg));
    Terminate;
    Exit;
  end;

  // parse parameters
  if HasOption('h', 'help') then begin
    WriteHelp;
    Terminate;
    Exit;
  end;

  { add your program here }

  // stop program loop
  Terminate;
end;

constructor TSample.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  StopOnException:=True;
end;

destructor TSample.Destroy;
begin
  inherited Destroy;
end;

procedure TSample.WriteHelp;
begin
  { add your help code here }
  writeln('Usage: ', ExeName, ' -h');
end;

var
  Application: TSample;
begin
  Application:=TSample.Create(nil);
  Application.Title:='SampleApplication';
  Application.Run;
  Application.Free;
end.

クロスコンパイル(Windows > Linux)の設定

まず、ビルドモードを追加します(今回はLinux x64 Releaseという名前で追加)
image.png

そして、必要な設定(バイナリファイルの出力先をターゲットOSごとに分ける設定や、そもそものターゲットOSの設定など)をおこないます。
image.png

image.png

謎のエラーが、、、

上述までの設定が終わり、プロジェクトオプションを閉じようとしたら、以下のようなエラーが出ました。
image.png

どうもLinuxをターゲットにコンパイルするには追加の某が必要そうです。

色々調べてるうちに、こちらのwikiの記事にあたったのですが、This is less trivial, there is some info in the buildfaqとあり、そうかless trivialなのね、と思いながらbuildfaqを参照すると、最終的に2010年に作成されたpdfに行き着き、これは(クロスコンパイル環境を作るのは)骨が折れそうだな、と感じました。

そのため、一旦深追いはやめようと思うに至りました。

さいごに

おそらく、Windows上でWindowsネイティブアプリを作るにあたってはそれほど難しくはないのかもしれません(知らんけど)。

今回は目的が異なるので深追いは諦めて、次はWSL上のUbuntu環境でLazarusを動かして試してみようと思います(できるかどうかはわからない)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?