C関数の呼び出しとリンク
libcや外部ライブラリに接続します
「C関数の呼び出しとリンク」はCoddyKit上の無料Zig Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはZig Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Zig Academyコースには全4レッスンが含まれています。
インポートとリンクは別物
@cImportが提供するのは宣言です。実際のマシンコードは、リンクする必要があるCライブラリに存在します。
libcにリンクする
多くのC呼び出しにはC標準ライブラリが必要です。ビルド時にlibcをリンクするよう指定すると、printfのような関数をリンク時に解決できます。
exe.linkLibC();CLIでリンクする
手早く実行する場合は、フラグを自分で渡します。単一ファイルを直接コンパイルするときは-lcでlibcにリンクできます。
zig build-exe main.zig -lcネイティブコードと同じように呼び出す
リンクが完了すれば、C関数はZigの関数と同じように呼び出せます。c.printf(...)と記述すれば、Zigが呼び出し規約を処理します。
c.printf("%d\n", 42);シグネチャを一致させる
Cのシグネチャに合った引数を渡す必要があります。Zigは変換されたプロトタイプを認識しているため、型が間違っているとコンパイルエラーになります。
名前付きライブラリにリンクする
他のライブラリを使う場合は、その名前を指定します。linkSystemLibraryによって、リンカーに数学ライブラリなどを取り込ませることができます。
exe.linkSystemLibrary("m");戻り値を受け取る
C関数の戻り値は、変換された型の通常のZig値として返され、保存や検査にそのまま使えます。
const n = c.abs(-5);エラーにはCの慣習を使う
Cにはエラー共用体がないため、失敗は戻りコードや設定されたerrnoとして表されます。Cと同じ方法で手動で確認します。
暗黙のマーシャリングはない
Zigがデータを黙って変換することはありません。渡したものがそのままCに届くため、呼び出しは軽量で予測しやすくなります。
ビルドファイルで接続する
build.zigでは、アーティファクトにリンク設定を追加します。コードをコンパイルする同じexeステップに、使用するライブラリも記録されます。
exe.linkLibC();
exe.linkSystemLibrary("z");成功までの2ステップ
Cを呼び出すには、必ずインポートとリンクの両方が必要です。宣言を取り込み、その後で実際のシンボルがリンカーから利用できるようにします。
クイックチェック
C関数を実際に解決できるようにするものは何か考えてみてください。
まとめ
Cを呼び出すにはインポートとリンクの両方が必要で、その後はC関数をネイティブなZig関数と同じように呼び出せることを学びました。🎯
よくある質問
「C関数の呼び出しとリンク」レッスンは無料ですか?
はい。「C関数の呼び出しとリンク」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Zig Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Zig Academyコースには全4レッスンが含まれています。
「C関数の呼び出しとリンク」で何を学びますか?
libcや外部ライブラリに接続します ブラウザで直接実行するハンズオンコードでZig Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Zig Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのZig Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「C関数の呼び出しとリンク」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このZig Academyレッスンでコードを書いて実行できますか?
はい。すべてのZig Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。