
C言語でプログラミング言語に対する理解を深めてみます。ー実行ファイル作成編ー
今回行う調査は「LLVMでのClangを使ってC言語を学習する。」です。
(このnote記事の画像はLLVMのロゴを使っています。)
iOSアプリ製作を行なっている時にUnsafePointerを使う機会に出会いました。個人製作なのでその場凌ぎで作ってもよかったのですがポインタに関して詳細な学習を後回しにして4年以上経っていることもあり、思い切って学習することにしました。
ただSwiftはポインタを直接扱うような記述を滅多にしません。
そのためC言語を使って学習していこうと思います。
Swiftは最終的にLLVMによってコンパイルされます。なので今回C言語をコンパイルし実行ファイルを作成するにあたりLLVMでのClangコマンドを使っていきます。
ここまで詳細に動機を書いていきましたが用意するものとしてはmacが一台あれば上記項目は全て満たすことができます。しかしやりたいこととしてはWindowsの方もできます。
今回はC言語をコンパイルし実行ファイルを作成してみます。
環境
・macOS(M1チップ搭載のmacに関しては未検証です。)
Xcodeインストール済みであること。
・Windows(Virtual Box上のFreeBSD)
Windowsの方は環境設定が必要なのでこちらを参考にお願いします。
なぜFreeBSD上で行うのかも含めて一読していただけるとありがたいです。
C言語のコンパイルによる実行ファイルの作成
LLVMでのClangを使ってC言語のコンパイルし実行ファイルを作成します。環境で手順が違います。
コンパイルさせるソースコードの内容が変わっても基本的には実行ファイルの作成手順は変わりません。
なので手順の例として、定番な"Hello World!"をコンソールに表示させるコマンドを作成します。
コンパイルさせるコードは以下です。
#include <stdio.h> // printf()を使うために使用します。
int main(){
printf("Hello World!\n");
}
macOSでの手順
使用するソフトウェア
・ターミナル
・CotEditor or テキストエディット or その他のテキストエディタアプリ
(この記事ではCotEditorで説明します。)
CotEditorを起動しコンパイルさせたいコードを記述します。

記述ができたら「command + s」でファイルを保存します。この時名前は「Hello.c」のように拡張子を.cにしてください。

ターミナルを起動し「cd」コマンドを使って「Hello.c」が配置されているディレクトリまで移動します。コンソールにあらかじめ「cdスペース」と打ち込み、下の写真のようにドラックアンドドロップをすると早いと思います。ただしファイル名まで入ってしますので注意が必要です。


ディレクトリの移動ができたら「ls -l」コマンドでHello.cがあるかを確認します。
確認できたら下記のコマンドでHello.cをコンパイルします。
% clang Hello.c
コンパイルがうまくいくとa.outというファイルが生成されます。このファイルがHello World!をコンソール上に表示させるコマンドになります。この作成されたファイルは実行ファイルと言います。
名前を指定せずに作成した実行ファイルはa.outとなるのですがその詳細は下記のURLをご覧ください。

このa.outを実行してみます。「./a.out」と打ち込み実行します。

「Hello World!」と表示されたら成功です。
WindowsPC環境向けでの手順
※C言語のコンパイルそのものはFreeBSD上で行なっていることに注意してください。
使用するソフトフェア
・Windows Terminal
(Windows PowerShellのsshでFreeBSDにアクセス)
・Notepad++ or メモ or その他のテキストエディタアプリ
(この記事ではNotepad++で説明します。)
Notepad++を起動しコンパイルさせたいコードを記述します。

記述ができたら「ctrl + s」でファイルを保存します。この時名前は「Hello.c」のように拡張子を.cにしてください。「ファイルの種類」を「All types」にすると間違えずに保存できると思います。

Windows Terminalを起動しタブにWIndows Power Shellと書いてあることを確認します。

「ssh」コマンドを使ってFreeBSDに接続します。(FreeBSDを起動していない方はVirtualBoxから起動してから接続してください。)

「pwd」コマンドで確認すると「/root」配下にいると思います。
ここで作業すると使用しない余計なファイルを触れてしまう可能性があるので「mkdir work」コマンドで作業用ディレクトリを作成します。コマンドを実行したら作成できたかを「ls -l」コマンドもしくはその短縮形「ll」で確認します。

「cd work/」コマンドで作業用ディレクトリに移動します。

Notepad++で作成した「Hello.c」をFreeBSDに送ります。
Windows Terminalの「+」から新規Windows Power Shell画面を開きます。

「cd」コマンドで「Hello.c」を保存したフォルダまで移動します。

「scp」コマンドを使って「Hello.c」を送信します。

ファイルの送信ができたらsshでFreBSDに接続しているWindows Power Shellの画面に戻り、「ls -l」コマンドでHello.cがあるかを確認します。

確認できたら下記のコマンドでHello.cをコンパイルします。
# clang Hello.c
コンパイルがうまくいくとa.outというファイルが生成されます。このファイルがHello World!をコンソール上に表示させるコマンドになります。この作成されたファイルは実行ファイルと言います。
名前を指定せずに作成した実行ファイルはa.outとなるのですがその詳細は下記のURLをご覧ください。

このa.outを実行してみます。「./a.out」と打ち込み実行します。

「Hello World!」と表示されたら成功です。
最後に
どうしても仮想環境を用いるwindowsのほうが複雑になってしまいますがLLVMでのClangを使ってC言語を学習することにこだわりたいので今後もこのように進めていきます。
途中で詰まるなどありましたらその際は気兼ねなくコメントしていただけたらと思います。
次回からLLVMでのClangを使ってC言語のポインタ学習前準備をできたらと思います。
ここまでお読みいただきありがとうございました。