見出し画像

iOSでEigenを利用する

iOSでEigenを利用する方法を説明します。

1. Eigen

C++にはデファクトスタンダードな行列計算ライブラリとして「Eigen」があります。ヘッダのみのライブラリなのでプロジェクトに組み込みやすく、計算も速いです。

2. セットアップ

(1)公式サイトからEigenをダウンロード。
今回は、「Eigen 3.3.7 released!」の「zip」をダウンロードして解凍します。

(2)フォルダ名を「eigen_3.3.7」に変更し、プロジェクトに追加。

(3)Xcodeの「Build Settings → Header Search Paths」に、フォルダのパスを追加。

"$(SRCROOT)/HelloSwift/eigen_3.3.7"

3. ラッパークラスの作成

Eigenが正しく追加されたことをテストするために、ライブラリクラスを報告するラッパークラスを作成します。

(1)Xcodeのメニュー「File → New → File」で「iOS」の「Cocoa Touch Class」を選択し、Class「EigenWrapper」とLanguage「Objective-C」でファイルを生成。

(2)Xcodeに以下のようなポップアップが表示されるので、[Create Bridging Header]をクリック。

画像1

これにより、プロジェクトに以下の3つのファイルが生成されます。

・EigenWrapper.h
・EigenWrapper.m
・<プロジェクト名>-Bridging-Header.h(ブリッジングヘッダー)

(3)「EigenWrapper.h」を次のように編集。

#import <UIKit/UIKit.h>

@interface EigenWrapper : NSObject
+ (NSString *)eigenVersionString;
@end

(4)「EigenWrapper.m」を「EigenWrapper.mm」に名前変更して、次のように編集。
「C++」を使用するには、拡張子を「mm」とします。

#import <Eigen/Core>
#import "EigenWrapper.h"

@implementation EigenWrapper

//バージョンの取得
+ (NSString *)eigenVersionString {
   return [NSString stringWithFormat:@"Eigen Version %d.%d.%d",
       EIGEN_WORLD_VERSION, EIGEN_MAJOR_VERSION, EIGEN_MINOR_VERSION];
}

@end

(5)「<プロジェクト名>-Bridging-Header.h」を次のように編集。
Xcodeは「Bridgeging Header」を使用して、Object-C-Swift間で接続します。

#import "EigenWrapper.h"

4. 動作確認

「AppDelegate.swift」で先ほど追加したeigenVersionString()を呼び出します。

   //アプリ起動時に呼ばれる
   func application(_ application: UIApplication,
       didFinishLaunchingWithOptions launchOptions:
       [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
       print("eigen: ", EigenWrapper.eigenVersionString()!)
       return true
   }

成功すると、コンソールログに次のようにバージョンが表示されます。

eigen:  Optional("Eigen Version 3.3.7")

この記事が気に入ったらサポートをしてみませんか?