こんにちは、阿久梨絵です!
Objective-Cは主にAppleのエコシステム(macOSやiOS)で使われるプログラミング言語ですが、実際にはGNUのコンパイラ、すなわちGCC(GNU Compiler Collection)を使用してもObjective-Cのソースをコンパイルすることが可能です。この記事では、 GNUコンパイラ を使ったObjective-Cソースコードのコンパイル方法とその際の注意点について解説します。
1. GNUコンパイラ(GCC)でのObjective-Cサポート
GCCは、C、C++、Fortranなど、さまざまなプログラミング言語をサポートする柔軟なコンパイラです。Objective-CはGCCによってサポートされる言語の1つであり、他の言語と同様にコンパイルが可能です。
現在では、GCCに加えLLVM/ClangがObjective-Cコンパイルのメインツールとして広く使われていますが、GCCも引き続き利用することができます。
2. GCCでObjective-Cをコンパイルするための手順
必要なパッケージのインストール Objective-CコードをGCCでコンパイルするには、Objective-Cランタイム(GNUstepなど)とGCCのObjective-C拡張機能をインストールする必要があります。
例(Debian/Ubuntuの場合)
sudo apt update
sudo apt install gcc gobjc gnustep-devel
gcc:GNUコンパイラ本体。
gobjc:Objective-Cサポート。
gnustep-devel:Objective-Cコードの実行に必要なGNUstepライブラリ(Objective-Cランタイム)。
シンプルなObjective-Cソースコードの作成
次のような簡単なObjective-Cプログラムを用意します(例:hello.m)。
#import <Foundation/Foundation.h>
int main(int argc, const char *argv[]) {
@autoreleasepool {
NSLog(@”Hello, GNUstep!”);
}
return 0;
}
コンパイル gccコマンドを使用してソースコードをコンパイルします。Objective-Cでは.m拡張子が使用されるため、以下のように指定します。
gcc -o hello hello.m `gnustep-config –objc-flags` `gnustep-config –base-libs`
・gnustep-config –objc-flags:GNUstepランタイムのObjective-Cフラグを取得。
・gnustep-config –base-libs:必要なライブラリをリンク。
実行 コンパイルが成功すると、実行可能ファイルhelloが生成されます。次のコマンドで実行可能です。
./hello
実行結果
2025-03-16 12:00:00.000 hello[12345] Hello, GNUstep!
3. 使用時の注意点と制約
GNUstepのランタイム
GCCを使ったObjective-Cプログラムの実行には、GNUstepランタイムが必要です。GNUstepはAppleのCocoaフレームワークに類似したオープンソースのフレームワークで、Objective-Cコードの実行に必要な基本ライブラリを提供します。
一部のCocoa専用API(例:UIKit)はGNUstepではサポートされないことに注意が必要です。
Clangとの違い
Appleのエコシステムでは、LLVM/Clangが標準コンパイラとして使用されており、最新のObjective-C機能(例:ARCやモダン構文)をサポートしています。
一方、GCCは最新のObjective-C機能のサポートが限定的である場合があります。
移植性
GCCとGNUstepを使用する場合、特定のプラットフォームや環境での動作に依存します。特に、Appleのエコシステム以外でObjective-Cコードを実行する場合、ランタイムやフレームワークの違いによる互換性の問題が発生する可能性があります。
4. GCCを使う場面
Appleエコシステム以外の環境でObjective-Cを試したい場合
LinuxやWindowsでGNUstepを利用し、Objective-Cコードを実行する際に便利です。
教育目的
Objective-Cの基本的な構文を学ぶ目的でGCCを利用する場合、手軽に環境を構築できます。
まとめ
GNUのコンパイラ(GCC)はObjective-Cをサポートしており、GNUstepを利用することでLinuxやWindowsなどの非Apple環境でもObjective-Cコードをコンパイル・実行することが可能です。ただし、Clangに比べると一部の最新機能のサポートが不足している場合があるため、用途に応じて使い分けるのが良いでしょう。
この記事を参考に、GNUコンパイラを活用してObjective-Cに挑戦してみてください!
阿久梨絵でした!