質問: macOSでcファイルをコマンドをつけずにコンパイルするとa.outというファイルが出来上がりますが、これはどのような意味でこのファイル名なのでしょうか。 outという拡張子は何を指しているのでしょう。windowsでいうexeとはまた別物ですよね。標準出力を使用したコンソールアプリケーションということなのでしょうか。 windowsでいうと実行可能なアプリケーションはexeという拡張子がつきますが、macOSだとappという拡張子を用いたファイルを度々見ます。 finderで一見するとファイルのように見えますが、これ実はディレクトリなのでしょうか?ダブルクリックで実行できるようになっていますが、どのように動作しているのでしょうか。 ネイティブレベルでプログラムを組んでみたいと思うのですが、macOSではどのように勉強を進めて行けばいいでしょうか。 windowsの場合、win32apiはアセンブリで組んで利用することもできますが、macOSの場合win32apiにあたるようなものはあるのでしょうか。 windowsの場合、user32.dllなどといったDLLがどのwindowsPCにもあるので、win32apiを利用すればどのwindowsPCでも動くのですが、OpenGLはDLLをネットから持ってきて、それを利用するという形なのでしょうか。そのような形だと、OpenGLのDLLが存在するパソコンではないと動かないと思うのですが、どうなのでしょう。 linuxカーネルというものを利用すれば良いのでしょうか? windowsのアプリケーションは、どんなライブラリを使っていてもネイティブレベルに遡ればwin32apiを利用していると思うのですが、macOSで言えばそれはlinuxカーネルというものにあたるのでしょうか? システムコールを利用してプログラムを組むという方法も考えられるかもしれません。user32.dllなどにある関数では中でシステムコールを使って組まれているのでしょうか? 如何せん実務経験のない初心者なので質問が多くなっていますが、よろしくお願いします。皆目見当はずれな事を言っていて、質問自体おかしいという所もおそらくありそうなので、そんな所も教えていただきたいです。
回答: OpenGLの部分に関してはFAQ - OpenGL Wikiに答えが書いてあります(英語)。 > > ###### OpenGLとは何ですか? > > > OpenGLはラスタライズベースのレンダリングシステムの動作を記述する仕様の名前です。 > > GPUを作成するハードウェアベンダーは、OpenGLレンダリングシステムの実装を書く責任があります。 > > > ###### OpenGLでないものは何ですか? > > > OpenGLはグラフィックスのレンダリングのみ扱います。 > > アニメーション、タイミング、ファイルIO、画像ファイルの処理、GUIなどの機能を提供しません。 > > GLUTはOpenGLの一部ではありません、これは、OpenGLウィンドウを作成するために一部のユーザによって使用される単なるライブラリです。 > > > ###### OpenGLはオープンソースですか? > > > いいえ、OpenGLにはソースコードがありません。OpenGLはオープンな仕様で、誰でも無料でその仕様をダウンロード出来ます。 > > > ###### OpenGLはどこでダウンロードできますか? > > > OpenGLはソフトウェア製品ではありません、これは仕様です。 > > macOSではAppleによるOpenGLの実装がOSに含まれています。 > > Windowsでは、NVIDIAやAMD等のハードウェアベンダーが独自の実装を記述するためにOpenGLの仕様を使用しているので、それらが提供するドライバに含まれています。 > > グラフィックドライバを更新すると、通常そのハードウェア用の最新のOpenGL実装を取得出来ますが、プログラマにとってドライバのインストールだけでは不十分です。 > > OpenGLの関数のポインタは手動またはライブラリで自動的にロードする必要があります。 > > > ###### OpenGL SDKはありますか? > > > 実際のOpenGL SDKはありません。 > > ウェブサイトのコレクション、ドキュメント、チュートリアルへのリンク等がありますが、それはあなたが考えている種類のSDKではありません。 > > > ###### Windowsではどのように動作しますか? > > > すべてのWindowsバージョンはOpenGLをサポートしています。 > > アプリケーションをコンパイルすると、opengl32.dllとリンクします。 > > プログラムを実行するとopengl32.dllがロードされ、GLドライバがあるかをレジストリでチェックし、存在する場合はロードします。 > > opengl32.dllはOpenGL1.1の機能を直接公開するだけで、より高いGLバージョンにアクセスするにはこれらの関数ポインタを手動でロードする必要があります。 > > > > > finderで一見するとファイルのように見えますが、これ実はディレクトリなのでしょうか?ダブルクリックで実行できるようになっていますが、どのように動作しているのでしょうか。 > > > iOSアプリのものですが、macのアプリにも当てはまると思います アプリケーションに期待される挙動 アプリケーションバンドルは、アプリに関係のあるリソースを1箇所に集めたファイルシステム上のディレクトリです。 バンドルにはアプリの実行可能ファイルと支援用リソースファイル(アイコン・画像・ローカライズされたコンテンツ)等が含まれています。 > > windowsの場合、win32apiはアセンブリで組んで利用することもできますが、macOSの場合win32apiにあたるようなものはあるのでしょうか。 > > > CocoaとかFoundationフレームワークと呼ばれているものがそれに該当するのでは?と思います(Macは詳しくないです)。