GNUコンパイラ でObjective-Cソースをコンパイルする方法と注意点

こんにちは、阿久梨絵です!
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に挑戦してみてください!
阿久梨絵でした!

Verified by MonsterInsights