はじめに
前回、Windows10上にLazarusをインストールしまして、さぁLinuxアプリをつくってみよう、、、と思ったのですが。。。
結論から言うと、Windows上でLinuxアプリのコンパイルはややこしそうなので一旦諦めることにしました。
私が今回やりたいことは、Object Pascalで作ったLinuxアプリをマネージドKubernetes上で動かす
なのですが、Windows上でのクロスコンパイルにこだわる必要がないので、あまり深追いはしないでおこうと思ったためです。(Linux環境でLazarusを動かせるみたいなので)
経緯
まず、コンソールアプリケーションのプロジェクトを作成しました。
Project > Console application
を選択
すると、下のようなコードが自動生成されます。
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
という名前で追加)
そして、必要な設定(バイナリファイルの出力先をターゲットOSごとに分ける設定や、そもそものターゲットOSの設定など)をおこないます。
謎のエラーが、、、
上述までの設定が終わり、プロジェクトオプションを閉じようとしたら、以下のようなエラーが出ました。
どうもLinuxをターゲットにコンパイルするには追加の某が必要そうです。
色々調べてるうちに、こちらのwikiの記事にあたったのですが、This is less trivial, there is some info in the buildfaq
とあり、そうかless trivialなのね、と思いながらbuildfaqを参照すると、最終的に2010年に作成されたpdfに行き着き、これは(クロスコンパイル環境を作るのは)骨が折れそうだな、と感じました。
そのため、一旦深追いはやめようと思うに至りました。
さいごに
おそらく、Windows上でWindowsネイティブアプリを作るにあたってはそれほど難しくはないのかもしれません(知らんけど)。
今回は目的が異なるので深追いは諦めて、次はWSL上のUbuntu環境でLazarusを動かして試してみようと思います(できるかどうかはわからない)。