Windows 用の目標 C
-
09-06-2019 - |
質問
Windows プラットフォームで Objective-C を記述する最良の方法は何でしょうか?
Cygwinとgcc?これを何らかの方法で Visual Studio に統合する方法はありますか?
それに沿って、このようなものに Windows SDK をリンクして使用する方法について何か提案はありますか。それは別の獣ですが、Windows DLLにアセンブリとリンクを記述してそれらの呼び出しにアクセスできることは知っていますが、グーグルで断片的な指示を取得せずにこれを行う方法がわかりません。
この種のことを実行または説明するための優れたオンラインまたは書籍リソースを知っている人はいますか?
解決
前の 2 つの回答を拡張すると、Cocoa フレームワークは必要なく、Objective-C のみが必要な場合、gcc はどのプラットフォームでも動作します。Cygwin を通じて使用することも、MinGW を入手することもできます。ただし、Cocoa フレームワーク、または少なくともその適切なサブセットが必要な場合は、GNUStep と Cocotron が最善の策です。
Cocotron は、CoreGraphics や CoreData など、GNUStep にはない多くのものを実装していますが、特定のフレームワーク上での実装がどの程度完全であるかは保証できません。彼らの目的は、Cocotron を OS X の最新バージョンで最新の状態に保ち、実行可能な OS X プログラムを Windows 上で実行できるようにすることです。GNUStep は通常、最新バージョンの gcc を使用するため、Objective-C++ および多くの Objective-C 2.0 機能のサポートも追加されています。
これらの機能を GNUStep でテストしたことはありませんが、十分に新しいバージョンの gcc を使用すれば、それらの機能を使用できる可能性があります。数年前までは GNUStep で Objective-C++ を使用できませんでした。ただし、GNUStep はほぼすべてのプラットフォームからコンパイルします。Cocotron は非常に Mac 中心のプロジェクトです。おそらく他のプラットフォームでもコンパイルすることは可能ですが、makefile ではなく XCode プロジェクト ファイルが提供されるため、そのフレームワークをそのままコンパイルできるのは OS X 上のみです。また、XCode で Windows アプリをコンパイルする手順も含まれていますが、他のプラットフォームでは含まれていません。基本的に、Cocotron 用の Windows 開発環境をセットアップすることはおそらく可能ですが、GNUStep 用にセットアップするほど簡単ではなく、自分で行う必要があるため、開発環境を開発している場合は、間違いなく GNUStep を使用することをお勧めします。 Windows 専用ではなく Windows。
実は、Cocotron は MIT ライセンスに基づいてライセンスされており、GNUStep は LGPL に基づいてライセンスされています。
他のヒント
あなた できる Windows 環境内で Objective C を使用します。次の手順に従えば、問題なく動作するはずです。
- 訪問 GNUstep ウェブサイト そしてダウンロード
GNUstep MSYS Subsystem
(GNUstep の MSYS)、GNUstep Core
(GNUstep のライブラリ)、およびGNUstep Devel
- これらのファイルをダウンロードした後、この順序でインストールしてください。そうしないと、構成に問題が発生します。
- 案内する
C:\GNUstep\GNUstep\System\Library\Headers\Foundation
1 そしてそれを確実にするFoundation.h
存在します - コマンドプロンプトを開いて実行します
gcc -v
それを確認するためにGNUstep MSYS
正しくインストールされています (ファイルが見つからないというエラーが発生した場合は、bin
のフォルダGNUstep MSYS
あなたの中にありますPATH
) この単純な「Hello World」プログラムを使用して、GNUstep の機能をテストします。
#include <Foundation/Foundation.h> int main(void) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Hello World!."); [pool drain]; return; }
コマンドプロンプトに戻り、
cd
「Hello World」プログラムを保存した場所に配置し、コンパイルします。2gcc -o helloworld.exe <HELLOWORLD>.m -I /GNUstep/GNUstep/System/Library/Headers -L /GNUstep/GNUstep/System/Library/Libraries -std=c99 -lobjc -lgnustep-base -fconstant-string-class=NSConstantString
最後に、コマンド プロンプトで次のように入力します。
helloworld
それを実行する
どうぞ、Objective-C を楽しんでください。
ノート:
- デフォルトのインストール パスを使用しました - それに応じてコマンド ラインを調整してください
- あなたのフォルダのパスが私のものと似ていることを確認してください。そうでない場合は、エラーが発生します。
また:
Cocotron は、Apple Inc. の Cocoa ドキュメントで説明されているものと同様のクロスプラットフォーム Objective-C API を実装することを目的としたオープン ソース プロジェクトです。これには、AppKit、Foundation、Objective-C ランタイム、および CoreGraphics や CoreFoundation などのサポート API が含まれます。
WinObjC?Windows Bridge for iOS (以前は「Project Islandwood」として知られていました)。
Windows Bridge for iOS (WinObjC とも呼ばれます) は、Visual Studio/Windows に Objective-C 開発環境を提供する Microsoft オープン ソース プロジェクトです。さらに、WinObjC は iOS API 互換性のサポートを提供します。最終リリースは今秋後半に行われる予定ですが (これにより、ブリッジは今後の Visual Studio 2015 Update に同梱される新しいツール機能を利用できるようになります)、
このブリッジは、現在の状態でオープンソース コミュニティに利用可能です。今から秋にかけて。MIT ライセンスに基づくオープンソース プロジェクトとしての iOS ブリッジ。プロジェクトの目標を考えると、iOS 開発者が Windows 上でアプリを簡単に構築して実行できるようにすることです。
Salmaan Ahmed が Windows Bridge for iOS について詳しく投稿しています http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/ コンパイラ、ランタイム、IDE 統合、ブリッジとは何か、そうでないものについて説明します。何よりも、iOS ブリッジのソース コードが公開されています。 今はGitHub。
iOS ブリッジは、x86 および x64 プロセッサ アーキテクチャ向けに構築された Windows 8.1 アプリと Windows 10 アプリの両方をサポートします。また、間もなくコンパイラの最適化と ARM のサポートが追加され、モバイル サポートが追加されます。
ココトロンプロジェクトについては複雑な気持ちがあります。彼らがソースコードを公開して共有しているのは嬉しいですが、彼らが物事を最も簡単な方法で行っているとは感じません。
例。
Apple はソースコードを公開しました 目的-C ランタイム, 、これにはプロパティとガベージ コレクションが含まれます。ただし、Cocotron プロジェクトには、Objective-C ランタイムの独自の実装があります。なぜわざわざ同じ作業を繰り返す必要があるのでしょうか?objc.dll ファイルの構築に使用できる Visual Studio プロジェクト ファイルもあります。または、本当に面倒な場合は、Windows 上の Safari のインストールから DLL ファイルをコピーすることもできます。
また、Apple がオープンソース化している CoreFoundation をわざわざ利用することもありませんでした。投稿しました 質問 これについては回答が得られませんでした。
現在の最善の解決策は、複数のソース (Apple、CocoTron、GnuStep) からソース コードを取得し、必要なものにマージすることだと思います。多くのソースを読む必要がありますが、最終的な結果にはそれだけの価値があります。
これが非常に古い投稿であることは承知していますが、つい最近になって利用可能になり、かつ Windows プラットフォーム上のほぼすべての Objective-C 2.0 機能を有効にするソリューションを見つけました。
gcc 4.6 の登場により、Objective-C 2.0 言語機能 (ブロック、ドット構文、合成プロパティなど) のサポートが Objective-C コンパイラーに追加されました (「 リリースノート 詳細については、こちらをご覧ください)。ランタイムも更新され、Apple 独自の Objective-C 2.0 ランタイムとほぼ同じように動作するようになりました。つまり、これは、Mac 上で Clang を使用して正規にコンパイルできる (ほぼ) すべてのプログラムは、変更を加えることなく gcc 4.6 でもコンパイルできることを意味します。
補足として、利用できない機能の 1 つは辞書/配列/etc リテラルです。これらはすべて、Apple の NSDictionary、NSArray、NSNumber などのクラスを使用するために Clang にハードコーディングされているためです。
ただし、Apple の広範なフレームワークがなくても満足できる場合は、それも可能です。他の回答で述べたように、GNUStep と Cocotron は Apple のクラス ライブラリの修正バージョンを提供します。または、独自のクラス ライブラリを作成することもできます (私の推奨オプション)。
MinGW は、Windows プラットフォームで GCC 4.6 を入手する方法の 1 つであり、以下からダウンロードできます。 MinGW ウェブサイト. 。インストールするときに、C、C++、Objective-C、および Objective-C++ のインストールが含まれていることを確認してください。オプションではありますが、MSYS 環境をインストールすることをお勧めします。
インストールすると、Objective-C 2.0 ソースを次のようにコンパイルできます。
gcc MyFile.m -lobjc -std=c99 -fobjc-exceptions -fconstant-string-class=clsname (etc, additional flags, see documentation)
MinGW には、ネイティブ GUI Windows アプリケーションをコンパイルするためのサポートも含まれています。 -mwindows
フラグ。例えば:
g++ -mwindows MyFile.cpp
まだ試したことはありませんが、Objective-C クラスを Objective-C++ で可能な限り最上位のレイヤーでラップすれば、ネイティブ Windows GUI C++ と Objective-C をすべて 1 つの Windows アプリケーション内でうまく組み合わせることができるはずだと想像しています。
チェックアウト WinObjC:
https://github.com/Microsoft/WinObjC
これは Microsoft による公式のオープンソース プロジェクトであり、Visual Studio + Windows と統合されています。
単に試してみたい場合は、.NET (Windows) 用の Objective-C コンパイラがここにあります。 クックアップ
ここでは、Windows で動作し、Visual Studio 2008/2010 と連携して動作する目的の C コンパイラを入手できます。
最新のソースをダウンロードするだけです。すべての CF-Lite をビルドする必要はありません。objc.sln と呼ばれるソリューションがあります。インクルード パスのいくつかを修正する必要がありますが、問題なくビルドされます。テスト プロジェクトも含まれているため、いくつかの object-c .m ファイルがコンパイルされて Visual Studio で動作しているのを確認できます。悲しいことの 1 つは、x64 ではなく Win32 でのみ動作することです。これをサポートするには、x64 用に記述する必要があるアセンブリ コードがいくつかあります。
Objective C 2.0 を Windows に移植する最近の試みは、 主観的 プロジェクト。
Readme より:
主観は、Windowsにアークサポートを備えた客観的なC 2.0をもたらす試みです。
このプロジェクトは、OBJC4-532.2のフォークであり、OS X 10.8.5に出荷される客観的なCランタイムです。ポートは、MINGWリンカーと組み合わせたLLVM-Clangを使用して、OS Xでクロスコンパイルできます。
多くは余分な作業の問題である特定の制限がありますが、例外やブロックなどの他の人は、サードパーティプロジェクトのより深刻な作業に依存しています。制限事項は次のとおりです。
• 32 ビットのみ - 64 ビットは進行中です
• 静的リンクのみ - 動的リンクが進行中です。
• クロージャ/ブロックなし - Windows で libdispatch がサポートするまで
• 例外なし - Clang が Windows でサポートするまで
• 古いスタイルの GC は使用しません - 誰かが気にするまでは...
• 内部構造:vtables、GDBサポート、単純なマロック、プリプチミー化はありません - これらのもののいくつかは、64ビットビルドで利用可能になります。
• 現在、パッチを適用した Clang コンパイラが必要です。パッチは-fobjc -runtime = subjフラグを追加します
プロジェクトは次の場所で入手できます ギットハブ, 、もあります。 糸 Cocotron Group について、進捗状況と遭遇した問題の一部を概説します。
Visual Studio 環境に慣れている場合は、
小さなプロジェクト:GCC大規模プロジェクトを備えたJGRASP:ココトロン
エミュレータがあると聞いたのですが、Apple II エミュレータしか見つかりませんでした。 http://virtualapple.org/. 。ゲーム限定のようです。
まず、忘れてください GNUStep ツール。どちらでもない プロジェクトマネージャー または プロジェクトセンター IDEと呼ぶこともできます。敬意を表して言うと、まるで GNUStep プロジェクトは 80 年代後半に行き詰まっています (80 年代後半の頃です) 次のステップ 初登場)。
ヴィム
ctags
以降、Objective-C をサポート r771 (必ずプレリリース 5.9 バージョンを選択し、 --langmap=ObjectiveC:.m.h
コマンドラインについては、を参照してください。 ここ)、適切なコード補完/タグナビゲーションが可能になります。
ここに短いものがあります 方法 Vim タグバー プラグインへの Objective-C サポートの追加について。
Emacs
同じことが当てはまります etags
最新の Emacsen に同梱されているため、Emacs から始めることができます 対物レンズCモード. ヤスニペット 便利なテンプレートを提供します。
そして、よりインテリジェントなものが必要な場合は、 基本的なタグベースのコード補完, 、 これをみて 質問.
日食
CDT サポートします Makefile
-ベースのプロジェクト:
-- したがって、技術的には、すぐに Objective-C プロジェクトをビルドできます (Windows では、 シグウィン または MinGW ツールチェーン)。唯一の問題は、コードエディターが、純粋なコードであると考えているものに対して多くのエラーを報告することです。 C コード (オンザフライ コード チェックをオフにすることもできますが、それでも...)。適切な構文強調表示が必要な場合は、次のように追加できます エクリム あなたへ 日食 両方の優れた機能をすべてお楽しみください 日食 そして ヴィム (上記を参照)。
もう一つの有望な 日食 プラグインは カラーラー, ただし、現時点では Objective-C をサポートしていません。ただし、お気軽に機能リクエストを提出してください。
スリック編集
スリック編集, 、 の間で その他の機能 優れた IDE の、 する サポート 目的-C.学習するのはかなり複雑ですが (ただし、Emacs ほど複雑ではありません)、購入することを気にしないのであれば、これが最良の選択肢であると思います (価格は非常に手頃です)。
さらに、 Eclipseプラグイン スタンドアロン エディタの代替として使用できます。
K開発
噂によると、 K開発 パッチ (15歳だけど誰が気にする?)個人的には思わない K開発 と比較して機能的に優れています エマクセン, なので、わざわざ試してみることはありません。
上記のツールはすべて多かれ少なかれ移植可能であるため、上記の内容は Linux での Objective-C 開発にも当てはまります。