C++ におけるマルチデバイス アプリケーションについての考慮事項
マルチデバイス アプリケーションについての考慮事項 への移動
目次
macOS でのスタック アラインメントの問題
macOS アプリケーションの場合は、すべてのメモリ データを 16 バイト境界にスタック整列させる必要があります。
- 詳細については、Eli Boling のブログ http://blogs.embarcadero.com/eboling/2009/05/20/5607 を参照してください。
- 「条件付きコンパイル(Delphi)」での ALIGN_STACK 条件シンボルの説明も参照してください。
使用可能な C/C++ ヘッダー ファイル
RAD Studio では、異なるターゲット プラットフォームごとに別個の C/C++ ヘッダー ファイルが用意されています。これらのファイルは、標準の検索パスである $(BDS)\include
にあります。
SDK 検索パス内のヘッダー ファイルを使用するには、「[リモート パス項目の追加]または[リモート パス項目の編集]」を参照してください。たとえば、macOS では、コード例「OpenGL 多色四面体(C++)」で説明しているようにして、OpenGL ライブラリと GLUT ライブラリを追加できます。SDK は、[ツール|オプション...|環境オプション|SDK マネージャ]で管理することができます。
Windows の場合
32 ビット Windows および 64 ビット Windows 用のヘッダー ファイルは $(BDS)\include\windows
にあります。
$(BDS)\include\windows 内のサブディレクトリ
|
説明 |
---|---|
\crtl
|
C/C++ RTL ヘッダー ファイル(.h)。 詳細は、「C ランタイム ライブラリ リファレンス」を参照 |
\fmx
|
FireMonkey のマシン生成ヘッダー ファイル(.hpp) |
\rtl
|
Delphi RTL のマシン生成ヘッダー ファイル(.hpp) |
\sdk
|
Microsoft Windows SDK ヘッダー ファイル(.h) |
\vcl
|
VCL のマシン生成ヘッダー ファイル(.h および .hpp) |
macOS の場合
macOS 用のヘッダー ファイルは、開発用 PC 上の $(BDS)\include\osx
にあります。
$(BDS)\include\osx 内のサブディレクトリ
|
説明 |
---|---|
\crtl
|
C/C++ RTL ヘッダー ファイル(.h)。これらのファイルの中には、Mac 上の /usr/include ディレクトリにある C/C++ ヘッダー ファイルをインクルードするものがあります。詳細は、「macOS C RTL」を参照
|
\fmx
|
FireMonkey のマシン生成ヘッダー ファイル(.hpp) |
\rtl
|
Delphi RTL のマシン生成ヘッダー ファイル(.hpp) |
iOS の場合
iOS 用のヘッダー ファイルは、開発用 PC 上の $(BDS)\include\ios
にあります。
$(BDS)\include\ios 内のサブディレクトリ
|
説明 |
---|---|
\crtl
|
C/C++ RTL ヘッダー ファイル(.h)。詳細は、「iOS C RTL」を参照 |
\fmx
|
FireMonkey のマシン生成ヘッダー ファイル(.hpp) |
\rtl
|
Delphi RTL のマシン生成ヘッダー ファイル(.hpp) |
Android の場合
Android 用のヘッダー ファイルは、開発用 PC 上の $(BDS)\include\android
にあります。
$(BDS)\include\android 内のサブディレクトリ
|
説明 |
---|---|
\crtl
|
C/C++ RTL ヘッダー ファイル(.h)。詳細は、「Android C RTL」を参照 |
\fmx
|
FireMonkey のマシン生成ヘッダー ファイル(.hpp) |
\rtl
|
Delphi RTL のマシン生成ヘッダー ファイル(.hpp) |
さまざまなプラットフォームでのフレームワークの使用
プラットフォーム | Delphi RTL (C/C++ RTL とは異なる) |
FireMonkey | VCL |
---|---|---|---|
32 ビット Windows | |||
64 ビット Windows | |||
macOS | |||
32 ビット iOS | |||
64 ビット iOS | |||
Android |
プラットフォーム | Delphi RTL (C/C++ RTL とは異なる) |
FireMonkey |
---|---|---|
32 ビット Windows | ||
64 ビット Windows | ||
macOS | ||
iOS | ||
Android |
フレームワークの使用
macOS の場合
Mac 用のフレームワークに関連する BCCOSX と XLINK のオプションを次の表に示します。
ツール | オプション | 説明 |
---|---|---|
BCCOSX、macOS 用 C++ コンパイラ | --sysroot
|
リンカが呼び出されるときに、このオプションは -Fr オプションに変換されます。
|
BCCOSX、macOS 用 C++ コンパイラ | --framework
|
リンカが呼び出されるときに、このオプションは -Ff オプションに変換されます。
|
XLINK - C++ クロスプラットフォーム リンカ | -Fr
|
論理ルート ディレクトリの場所を指定します。 論理ルート ディレクトリは、ローカル(Windows)マシン上のディレクトリで、リモート(macOS)マシンのルートを表します。 |
XLINK - C++ クロスプラットフォーム リンカ | -Fp
|
リモート ライブラリのパスを指定します。-L オプションも参照。
|
XLINK - C++ クロスプラットフォーム リンカ | -Ff
|
指定したフレームワークをリンクするようにリンカに指示します。詳細は、「--framework 」を参照。
|
BCCOSX と XLINK を Mac フレームワークにリンクする手順についての説明は、「--framework
」を参照してください。
Mac フレームワークの詳細については、「macOS アプリケーション開発#Mac アプリケーションでのフレームワークの使用」を参照してください。
iOS と Android の場合
iOS と Android のフレームワークに関連する BCCIOSARM/BCCIOSARM64/BCCAARM と LD オプションを次の表に示します。
ツール | オプション | 説明 |
---|---|---|
BCCIOSARM/BCCIOSARM64/BCCAARM - 32 ビットおよび 64 ビット iOS デバイス、Android 用 C++ コンパイラ | -isysroot
|
iOS SDK および Android NDK のルートを指定します。通常は %IOS_SDK_ROOT% または %ANDROID_NDK_ROOT% に設定されます。
|
BCCIOSARM/BCCIOSARM64 - 32 ビットおよび 64 ビット iOS デバイス用 C++ コンパイラ | -F
|
フレームワーク パスを指定します。通常は %IOS_SDK_ROOT%\System\Library\Frameworks" に設定されます。
|
LD - BCCIOSARM/BCCIOSARM64 32 ビットおよび 64 ビット iOS デバイス用 | -syslibroot
|
論理ルート ディレクトリの場所を指定します。論理ルート ディレクトリとは、iOS SDK のルートを表す開発用 PC(Windows)上のディレクトリです。 |
LD - BCCAARM Android 用 | --sysroot
|
論理ルート ディレクトリの場所を指定します。論理ルート ディレクトリとは、Android NDK のルートを表す開発用 PC(Windows)上のディレクトリです。 |
LD | -framework
|
リンクするフレームワークを指定します。たとえば、-framework Foundation と指定すると、アプリケーションが Foundation フレームワークにリンクされます。
|
IDE の[プロジェクト|オプション...|C++ コンパイラ|ディレクトリと条件定義]では、[フレームワーク ルート ディレクトリ]プロジェクト オプションを使用して、フレームワークのインクルード パスに追加するディレクトリを指定することができます。
macOS および iOS での文字列リテラル char16_t と wchar_t
macOS および iOS では、char16_t
は、wchar_t
と等価ではありません(Windows では等価です):
- Windows では、
wchar_t
とchar16_t
は両方とも 2 バイト文字です。 - ところが、macOS、iOS、Android では
wchar_t
は 4 バイト文字です。
このため、UTF-16 の定数文字列を宣言するには、Windows では L
か u
のいずれかの接頭辞を使用しますが、macOS、iOS、Android では u
接頭辞を使用します。
Windows の例:
UnicodeString(L"Text"), UnicodeString(u"Text")
macOS、iOS、Android の例:
UnicodeString(u"Text")
ただし、macOS、iOS、Android で文字列リテラルに L
接頭辞を使用しても間違いではありません。 その場合は、UTF-32 の定数文字列が UTF-16 の文字列に変換されます。
互換性のためには、プラットフォームに応じて L
または u
の接頭辞が付加される定数文字列を記述する _D
マクロを使用します。以下に例を示します。
UnicodeString(_D("Text"))
モバイル プラットフォームについての詳細は、「文字列リテラルに関するリンカの警告の解決」を参照してください。
関連トピック
関連項目
- C++ アプリケーションの Unicode 対応
- Unicode 文字型とリテラル(C++11)
- マルチデバイス アプリケーションの要件
- Delphi におけるマルチデバイス アプリケーションについての考慮事項
- Windows と macOS との相違点 {{f|cmd|
- C++ コンパイラ
- BCCOSX.EXE - macOS 用 C++ コンパイラ
- BCC64.EXE - C++ 64 ビット Windows 版コンパイラ
- BCCIOSARM64.EXE - 64 ビット iOS デバイス用 C++ コンパイラ
- BCCAARM.EXE - Android 用 C++ コンパイラ
- macOS C Command Line 101
- 『フレームワーク プログラミング ガイド』:フレームワークとは(英語版)
- macOS Technology Overview: macOS Frameworks