« 2017年8月 | トップページ | 2017年10月 »

2017.09.27

Lazarus1.8RC4クロスコンパイルでの実行結果その2

Windows上からのX86_64-Linux版クロスコンパイルにてリンクの途中でエラー(Error while Linking)になる問題ですが、その後の調査でどうもリンク時にライブラリが不足しているために発生しているようで、プロジェクトソースに以下の指示を追加することでエラーを回避出来ることがわかりました(根本原因がはっきりしないので、すっきりはしないのですが)。

program Project1;
 
// ここから
{$ifdef Linux}
  {$ifdef FPC_CROSSCOMPILING}
    {$ifdef CPUARM}
      //if GUI, then uncomment
      //{$linklib GLESv2}
    {$endif}
    {$linklib libc_nonshared.a}
  {$endif}
{$endif}
// ここまでを追加する
 
uses
  Forms, tachartlazaruspkg, Interfaces,
  Unit1 in 'Unit1.pas' {Form1};

で、作成したx86_64-Linux版の実行ファイルをVirtualBox上のUbuntu64bit版で実行した結果です。
Ubuntu64
おーーーー!ちゃんと動きました。

残った課題はArm-Androidですが、VectPressさんのLazarusでAndroid開発環境を構築してみましたといった情報もありますので、無理して自力でやることもないのかも・・・

| | コメント (0) | トラックバック (0)

2017.09.23

Inno Script Studioを使用してセットアップファイルを作成する(修正版)

手順の一部に不具合があったため修正版を再度アップします。アプリのインストール先に「{pf}\アプリフォルダ」を指定していましたが、これだとセットアップ時にインストール先のフォルダを変更してもデフォルトのフォルダにインストールされてしまうことが判明。インストール先には{app}を指定するのが正解だとわかりましたので、関連部分の説明と画像を差し替えました。

Inno Setupを使用したセットアップファイルの作成方法についてはWeb上に色々と情報が公開されていますが、Setup Scriptを簡単に作成できるInno Script Studioに関する情報が少ないようなので、自分自身の覚書としてまとめます。Inno Script StudioではWizard形式でプロジェクトの雛形を作成出来るようですが、よくわからないので今回はTouchを例にして空のプロジェクトから作成してみます。

Inno Script Studioを起動すると以下のダイアログが表示されますので、Blank Scriptを選択してOKボタンを押します。
00
0

まずは、左上のオプションボタンを押してプロジェクト全体のオプションを設定していきます。
1
アプリケーションのフォルダ名を設定します。デフォのフォルダ名に、{pf}\アプリケーションをインストールするフォルダ名を入れます{pf}はProgram Filesフォルダ(もしくはProgram Files(86)フォルダ)のことです。この例では\Program Files\Touchフォルダにインストールされます。

2
続いてプログラムグループを設定します。デフォのグループ名にグループ名を入れます。ここで設定したグループ名はプログラムメニューのフォルダ名になります。

3
再起動マネージャを設定します。デフォルトでは、アプリを再起動するにもチェックが入っていますので、インストール後にWindowsを再起動する必要が無い場合はこのチェックを外します。

4
動作環境を設定します。ここは設定しなくても構いませんが、Windows95/98にインストールされると問題が出るかもしれないので、一応Windows7(ウィンドウズNT欄の右側の参照ボタンを押して表示されるダイアログボックスでWindows7を選択する)以上に設定します。
他にも設定項目が色々とありますが、全てを設定する必要はないものの、発行者情報やユーザ情報、バージョン情報などは設定しておいたほうが良いでしょう。

プロジェクト全体の設定が終わったら、セットアップファイルを作成するための実際の作業に入ります。
5
まずは、インストールするアプリケーションの実行ファイルやヘルプファイルなど付属させるファイルを登録していきます。
アイテム追加ボタンを押すと以下のダイアログボックスが表示されます。
Touchexe
まず、ソースファイル名にインストールするファイルを指定します。次に宛先フォルダのドロップダウンリストからファイルをインストールするフォルダを指定します。ドロップダウンリストから{app}を選択すれば、インストール先が最初のオプション設定で設定したアプリのフォルダにインストールされます。もしアプリフォルダ以外にインストールする場合は、そのフォルダを指定します。その他の項目は設定不要です。

皆さんはセットアップ実行中に「デスクトップにシィートカットを作成する」等の追加のオプション選択を見たことがあるでしょうか。ここではセットアップに「デスクトップにシィートカットを作成する」を追加してみたいと思います。
16
左側の選択メニューでタスクを選び(左側メニューの上から順番に設定していきたいところですが、ここは先に設定しておく必要があります)、アイテム追加ボタンを押します。

17
名前に適当な名前(日本語は設定できません)を付けて、セットアップ実行時に表示する文字列を説明欄に入力してOKボタンを押します。タスクで設定した項目はセットアップ実行時のオプション項目としてON/OFFを選択できるようになります。


タスクを追加したら、通常の作業に戻ります。次はプログラムメニュー等に登録するショートカットアイコンの設定です。
7_2

アイテム追加ボタンを押してアイテムを追加していきます。
Touchexe2
ショートカットアイコンの名前を設定し、ファイル名はファイルで設定したアイテムがドロップダウンリストに表示されますので、ここから選択します。プログラムグループにアイコンを作成する場合の宛先は{group}です。この{group}はプロジェクトオプションで接待したプロジェクトグループフォルダのことです。この例ではアイコンファイル名も指定していますが省略しても構いません。省略した場合はデフォルトのアイコン(アプリケーションであれば、そのアプリケーションのデフォルトアイコン、その他のファイルであれば関連付けられたアイコン)を使用します。

9_2
また、プログラムグループにアンインストールメニューを追加したい場合は、適当な名前をつけて、ファイル名の一覧から{uninstallexe}を選択します。
Touchexe3
次にいよいよデスクトップへのショートカットアイコン登録設定です。
名前とファイル名を設定したら、宛先ディレクトリの一覧から[commondesktop]を選択します。次にセットアップオプションでデスクトップショートカットを作成するかどうか切り替えられるように、ダイアログボックスのタブTasksを設定します。
11
先程タスクに追加したアイテムがリストに表示されていますので、このチェックをONにします。これで、このアイテムはセットアップ時に「デスクトップにショートカットを作成する」を選択した場合にだけ実行されるようになります。

続いて言語を設定します。言語を設定しないとセットアップが英語表示となります。
12
アイテム追加ボタンを押して言語アイテムを追加します。
13
名前にJapaneseを設定し、メッセージファイルの参照ボタンを押してJapanese.islを選択します。OKボタンを押せば登録は終わりです。

また、セットアップの最後に「Readme.txtを表示する」等の選択表示がある場合がありますが、これも設定してみます。
14
インスト時に実行でアイテム追加ボタンを押します。
Touchreadme
ファイル名の一覧から実行したいファイルを選択して(この場合は「はじめに読んで下さい.txt」)、FlagsのGeneralでpostinstallとshellexec(この場合実行するのはテキストファイルなので、関連付けられたアプリケーションを起動する必要があるため)をチェックします。

これで一通り完了です。完成したInno Setup用のスクリプトファイルは「スクリプト」を選択することで確認できます。あとはプロジェクトメニューのコンパイルかスピードボタンでコンパイルすればセットアップファイルが作成されます。
18

上記の手順で作成したセットアップファイルの実行例

Setup1
{pf}Touchの通りになっています。

Setup2
プログラムグループも設定通りです。

Setup3
追加のオプションが表示されています。

Setup4

Setup5
セットアップの最後に「初めに読んで下さい.txtの表示」選択が表示されました。

Inno Setupの使い方は色々と情報がありますが、スクリプトをごりごりと直接記述する方法が殆どで初心者には敷居が高い感じがします。一方、Inno Script Studioを使用すれば上記のように、わかりやすいユーザインタフェースである程度のセットアップファイルを作成出来ますので便利ではないでしょうか。
尚、Inno Script Studioとその日本語化については以下情報があります。
Inno Script Studio https://www.kymoto.org/products/inno-script-studio
日本語化 https://www42.atwiki.jp/jfactory/pages/75.html

| | コメント (0) | トラックバック (0)

Lazarus1.8RC4クロスコンパイルでの実行結果

クロスコンパイルに成功したi386-Linuxとarm-Linux用の実行ファイルが動作するかどうか確認しました。

尚、テスト用のプロジェクトは前回作成した正規乱数発生テスト用のものを用いいました(ソースコードは修正無しでコンパイル出来ました)。

i386-Linux・・・VirtualBox上のUbuntu32bit版で確認した結果、
Randtest
おーーーー!正常に動作するようです。

arm-Linux・・・Raspberry Pi3+Raspbian Pixelで確認した結果、
Randtestrasp
おーーーーーーー!こちらも正常に動作しました。

とりあえず、あとはx86_64-Linuxとarm-Androidがなんとかなるのかどうかです。今後の課題として、暇な時に取り組んでみたいと思います。

| | コメント (0) | トラックバック (0)

2017.09.20

Lazarus1.8RC4とクロスコンパイル環境の構築

Lazarus1.8のRC4がリリースされていたのでインストール。

Windows32/64両方に対応出来るよう、Lazarus自体は32bit版を選択して、追加インストールファイルであるlazarus-1.8.0RC4-fpc-3.0.4rc1-cross-x86_64-win64-win32.exeも合わせてダウンロードし、最初に本体をインストール後Win64クロス環境をインストール。

で、起動すると各フォームが独立したクラシックスタイルで表示されます。Lazarus1.7で折角モダンなスタイルになっていたので1.8も同じようなスタイルにしてみました。

インストール直後の状態
Lazarus18

Lazarusのパッケージメニューからパッケージのインストールもしくはアンインストールを選択して、表示されたダイアログの右側のリストからAnchorDockingDsgn 0.5とsparta_DockedFormEditor 0.0をダブルクリックしてインストール対象に登録し、保存してIDEを再構築ボタンを押してしばし待つと、Lazarusが再起動してモダンスタイルに変更されます。この時、sparta_DockedFormEditor 0.0も一緒に登録しないと、フォームデザイナだけ独立フォームとなって面倒なことになりますので(と言うかなった)、必ず同時に登録しましょう。

Lazarus18mdn


Lazarus1.7(trunk)ではi386-Linuxのクロスコンパイル環境が標準で含まれていましたが、1.8RC4では(といいますか、通常のWindows版では)含まれていませんので、クロスコンパイル環境の構築にも挑戦してみました。

ということで、Web上の情報を色々と探したのですが、Windows上でMinGWやCygwin環境を構築してコマンドラインでごにょごにょするとか敷居の高い方法やfpcupコマンドを使用する方法が見つかりましたが、中々うまく行かず悩んでいたところで、GUIで操作できるfpcupdeluxeというものを発見。このfpcupdeluxeも中々うまくいかなかったのですが、やっとなんとかなる方法が見つかりましたのでまとめておきます。

まずfpcupdeluxeのソースコードをgithubからダウンロードします。

適当なフォルダに解凍して、Lazarusでプロジェクトファイルfpcupdeluxe.lpiを開いて実行ファイルを作成します。
次にfpcupdeluxe用の作業フォルダを作成して(ここの例ではC:\freepascal-master)、その中にサブフォルダfpcsrcを作成します。
続いてLazarus1.8RC4で使用しているFreePascal3.0.4のソースコードを取得ためにSubversion(SVN)クライアントを準備するのですが、ここではちょっと調べたところで使いやすそうだったTortoiseSVNをインストールして使用します。
https://ja.osdn.net/projects/tortoisesvn/から自分の環境にあったものをダウンロードしてインストールするとエクスプローラのコンテキストメニューからSVNの操作が出来るようになります。

エクスプローラで先程準備したC:\freepascal-master\fpcsrcを選択して右クリックし、コンテキストメニューからSVN Checkout...を実行すると以下のダイアログが表示されます。
Svncheckput

Tortoisesvn

ここでfpcupdeluxeをインストールしたフォルダ内のサブフォルダdeluxebinにあるfpcup.iniを開き、[ALIASfpcURL]タグ内にある3.0.4=の右側のアドレスをコピーして、このダイアログのURL of repository:に貼り付ける。あとはOKボタンを押せば、3.0.4のソースコードが全てフォルダ内にダウンロード出来ます。

ダウンロードが完了したら、fcpupdeluxe-xxx-xxx.exeを実行します(xxx-xxxはWindows32か64かで変わる)。
fpcupdeluxeが起動したら、まずは画面中央下の方にあるSetup+ボタンを押して設定ダイアログを開き、Include LCL with cross compiler (default=no)をONにして閉じます。
Fpcupsetting

次に左側のFPC Versionから3.0.4を選択、Lazarus versionからfixes1.8を選択します。
後は、作成したいクロスコンパイル環境に応じてCPUとOSを選択して、Install cross-compilerボタンを押せば必要なファイルの作成が始まるので、あとは終了のを待ちます・・・
Fpcupdelux

作成が終了すると、C:\freepascla-master\cross\binフォルダ内にcpu-os名のフォルダ(i386-linux等が出来ていますので、その中のファイル全てをLazarusをインストールしたフォルダ内のFreePascalフォルダ(例えばC:\Lazarusにインストールした場合は、C:\Lazarus\fpc\3.0.4\bin\i386-win32フォルダにコピーします。
尚、arm-linuxの場合にはファイル名を全てarm-linux-gnueabihf-xxxx.exeからgnueabihfを削除してarm-linux-xxxx.exeに変更する必要があります。
尚、一回の作業では必要なunitが作成されない場合がある(C:\freepascal-master\fpc\unit内にcpu-os名のフォルダとファイルがなければ作成されていない)ので、その場合はfpcupdeluxeで再度Install cross-compilerを実行すれば作成されると思います。
続いて、C:\freepascal-master\fpc\bin\i386-win32フォルダ内に作成されたppcrossXXX.exeも同様に上記フォルダにコピーします。
続いて、C:\freepascal-master\fpc\fpmkinstフォルダとC:\freepascal-master\fpc\unit内に作成されたcpu-osフォルダをそれぞれC:\lazarus\fpc\3.0.4\fpmkinstフォルダとC:\lazarus\fpc\3.0.4\unitsにコピーすればクロスコンパイル環境が出来上がります。

あとはLazarusのプロジェクトオプションの設定と対象で対象とするOSと対象とするCPUファミリーを選択すればそれらターゲット環境用の実行ファイルを作成出来るようになります。


この方法で試してみたのは以下の通りです。

i386-linux・・・環境作成OK.コンパイル・リンクは正常終了で多分OK
x86_64-linux・・・環境作成OK.リンクの途中でエラーとなるが原因は不明
arm-linux・・・環境作成OK.コンパイル・リンクは正常終了で多分OK
arm-android・・・環境作成の途中でエラーとなり、fpmkinstやunitの作成が出来ずに停止

多分OKというのは、実際にそれらの環境で実行出来るか確認出来ていないからです。そのうち暇があれば確認しようと思います。

| | コメント (0) | トラックバック (0)

2017.09.09

Delphi/Lazarusでの正規分布乱数の発生

正規分布乱数を発生させるためにはどのような方法がベストなのかDelphiで試してみました。
比較したアルゴリズムはボックスミュラー法と中心極限法理による正規分布乱数生成にDelphi標準関数のRandGを加えた3種類で、生成元の一様乱数はDelphi標準のRandomとメルセンヌ・ツイスターアルゴリズムを用いたDelphi用MT19937ライブラリを用いて見ました。

テスト方法はそれぞれ任意の正規分布乱数をグラフに表示させての”見た感じ”比較と一応定量的な評価として±1σ,±2σ,±3σそれぞれの確立分布と実際の分布数を比較して、その差をパーセント表示させて誤差の大きさを見ることにしました。
とここまでは良かったのですが、何とDelphi 10.1/10.2 StarterエディションにはTeeChartが付属していないためグラグ表示が出来ないことが判明。仕方がないので、一度はDelphi XE2 Pro版でテストプログラムを作成したものの、Starterしか持ってないから確認出来ない!という方がいるかも知れないと思い、あらためてLazarusで作成し直しました(LazarusにはTAChartというTeeChartに似たコンポーネントがあります)。

で、その結果ですが・・・どれもあまり代わり映えがしないようで、生成数が10,000個になるとどれもほとんど差がありません。
まぁ、よほど正確性が必要な用途に用いるのではない限り、Delphi/Lazarus標準のRandGが最強ではないかと思った次第です。
#それにしてもTeeChartにしてもTAChartにしても、機能が豊富すぎて使うのがものすごく面倒くさいです。

参考にLazarusプロジェクトソースと実行ファイルをアップしておきます

// ボックスミュラー法による乱数生成
procedure TForm1.BoxMullerTransform(RandType: integer; var x, y: Double);
var
  r1, r2: double;
begin
  case RandType of
    TYPEMT19937:
      begin
        r1 := mt19937_double(mtctx);
        r2 := mt19937_double(mtctx);
      end;
    else begin
      r1 := Random;
      r2 := Random;
    end;
  end;
  x := Sqrt(-2.0 * Ln(r1)) * Cos(2.0 * Pi * r2);
  y := Sqrt(-2.0 * Ln(r1)) * Sin(2.0 * Pi * r2);
end;
 
// 中心極限定理による乱数生成
function TForm1.CentralLimitTheorem(RandType: integer): double;
var
  i: integer;
  r: double;
begin
  r := 0.0;
  for i := 1 to 12 do
    case RandType of
      TYPEMT19937:
        r := r + mt19937_double(mtctx);
      else
        r := r + Random;
    end;
  Result := r - 6.0;
end; 

Test

「RandTest.zip」をダウンロード

| | コメント (0) | トラックバック (0)

MiGrep ver1.3を公開しました

ver1.25で以前の不具合が解消されたとの連絡をいただきましたので正式版として公開します。
私のホームページからダウンロードが可能となっています。
また、Vectorさんからも数日中にダウンロード出来るようになると思います。

| | コメント (0) | トラックバック (0)

« 2017年8月 | トップページ | 2017年10月 »