「あの人も読んでる」略して「も読」。さまざまな寄稿者が最近気になった情報や話題をシェアする企画です。他のテックな人たちがどんな情報を追っているのか、ちょっと覗いてみませんか?
こんにちは。
この度「あの人も読んでる」に寄稿させていただくことになったゴリラです。
最近リンカーについて勉強しているので、複数回に渡ってリンカーについて色々と紹介していきたいと思います。
リンカーとは
CやGo、Rustといったプログラミング言語では、OSで直接実行できる実行バイナリを生成できます。このバイナリ生成はざっくり次のようなステップがあります。
- ソースコードからオブジェクトファイルを生成
- オブジェクトファイルを結合して実行可能なファイルを生成
図で示すと以下の様な流れになります

オブジェクトファイルはソースファイル単位で独立してコンパイルすることができ、命令やグローバルな変数、定数といったデータを持っています。
リンカーはこれらのオブジェクトファイルを結合して、1つの実行可能なファイルを生成するソフトウェアのことを指しています。
ウェブシステムの開発ではリンカーの存在がほとんど表に出てこないので、知らない人もいると思いますが、このリンカーが動作する仕組みを理解することで、いつか仕事で役に立つかもしれません。
ちなみに、今日では主に以下のリンカーがあります。
リンカー | 概要 |
---|
GNU ld | GNUプロジェクトによって開発されたリンカー |
GNU Gold | Googleによって開発されたldより高速なリンカー |
LLVM lld | LLVMプロジェクトによって開発されたldとGoldより高速なリンカー |
mold | LLVM lldのオリジナル作者の植山類氏によって開発された新しい高速リンカー |
ld64 | Appleによって開発された macOS/iOS(Darwin)向けの Mach-O リンカーで、Xcode に同梱されている |
ld_prime | Appleによって開発された新しい高速リンカー、Xcode 15 以降に同梱されている |
リンカーの仕事とは
さきほど、リンカーはオブジェクトファイルを結合すると説明しましたが、結合する際にいろいろな処理を行います。今回は詳細は省きますが、ざっくりと以下の処理があります。
この記事のつづきを読もう✨新規登録/ログインしたらできること- すべての記事を制限なく閲覧可能
- 限定イベントに参加できます
- GitHub連携でスキルを可視化
ログイン