Amazon Linux上でDelphiを利用する方法[JAPAN]

Posted by on in Programming

毛利です。

 

AWS(EC2)上のAmazon Linuxを使ってDelphi実行を試してみました。

Amazon LinuxはAWS(EC2)のみで提供されていて AWS APIツールなどがすでにインストールされたLinuxです。

 

[EC2インスタンス作成]

C2コントロール画面からAmazon Linux(無料利用枠の対象)を選択し作成します

インスタンスが作成されるとすぐにec2-userでSSH接続できる状態になっています。

 

[環境構築]

http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/Linux アプリケーション開発

上記URLを参照し、Linux SDKをインストールします。

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/compile-software.html

#
sudo yum groupinstall "Development Tools"

Development Toolsのインストールが完了すると、「Complete!」と表示されます。

[PAServerのインストール]

RAD Studio 10.2 TokyoがインストールされているWindowsのディレクトリ内から

#
C:\Program Files (x86)\Embarcadero\Studio\19.0\PAServer\LinuxPAServer19.0.tar.gz

LinuxPAServer19.0.tar.gzをコピーし、EC2上で作成したAmazon Linuxのインスタンスにsftpなどにputします。

転送できたら解凍します。

#
tar -zxvf LinuxPAServer19.0.tar.gz

EC2のセキュリティグループ画面のインバウンド側 64211ポートを受信可能に追加します。

 

解凍したpaserverを起動します。

#
./PAServer-19.0/paserver


PAServer-19.0とRAD Studio側が接続できるかテストします。

「ツール」→「オプション」画面から→接続プロファイルマネージャーを選び「追加」します

「オプション」画面内の「SDK マネージャー」を選択し、追加ボタンをクリックします。

Linux側からSDK転送開始されます。

この状態でプロジェクトの新規作成Linuxコンソールアプリをデバッグ実行すると下記のようなエラーが出ます。

#
[DCC エラー] E2597 C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\ld-linux.exe: error: cannot find -lgcc_s


[DCC エラー] E2597 C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\ld-linux.exe: error: cannot find -lcurl

yumを使って必要なライブラリをインストールします

#
sudo yum install -y gcc gcc-c++
sudo yum install -y openssl-devel

実行後再度SDKのインポート作業をします。

取り込んだWindows側のファイルをリネームします。

libgcc_s.so.1 → libgcc_s.so

libcurl.so.4 → libcurl.so

 

[Delphiコード実行]

TNetHTTPClientを使ったシンプルなコードを実行します

////
uses
  System.SysUtils,
  System.Net.URLClient,
  System.Net.HttpClient, System.Net.HttpClientComponent;
var
  netc_:  TNetHTTPClient;
  res_:   IHTTPResponse;
  s_:     String;
begin
  try
    netc_ := TNetHTTPClient.Create(nil);
    try
      res_  := netc_.Get('http://mojeld.com/');
      s_    := res_.ContentAsString(TEncoding.UTF8);
      Writeln(s_);
    finally
      netc_.DisposeOf;
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

 

[結果]

Amazon LinuxからDelphiを実行しTNetHTTPClientを使ってデータを取得できました。

 

 



About
Gold User, No rank,
Delphi / C++Builder blogger

Comments

Check out more tips and tricks in this development video: