【#も読】リンカ・ローダ実践開発テクニック(@gorilla0513)のトップ画像

【#も読】リンカ・ローダ実践開発テクニック(@gorilla0513)

投稿日時:
ゴリラのアイコン

株式会社テックリード / 代表取締役

ゴリラ

Xアカウントリンク

「あの人も読んでる」略して「も読」。さまざまな寄稿者が最近気になった情報や話題をシェアする企画です。他のテックな人たちがどんな情報を追っているのか、ちょっと覗いてみませんか?


こんにちは。

この度「あの人も読んでる」に寄稿させていただくことになったゴリラです。

最近リンカーについて勉強しているので、複数回に渡ってリンカーについて色々と紹介していきたいと思います。

リンカーとは

CやGo、Rustといったプログラミング言語では、OSで直接実行できる実行バイナリを生成できます。このバイナリ生成はざっくり次のようなステップがあります。

  1. ソースコードからオブジェクトファイルを生成
  2. オブジェクトファイルを結合して実行可能なファイルを生成

図で示すと以下の様な流れになります

about_linker.png

オブジェクトファイルはソースファイル単位で独立してコンパイルすることができ、命令やグローバルな変数、定数といったデータを持っています。

リンカーはこれらのオブジェクトファイルを結合して、1つの実行可能なファイルを生成するソフトウェアのことを指しています。

ウェブシステムの開発ではリンカーの存在がほとんど表に出てこないので、知らない人もいると思いますが、このリンカーが動作する仕組みを理解することで、いつか仕事で役に立つかもしれません。

ちなみに、今日では主に以下のリンカーがあります。

リンカー概要
GNU ldGNUプロジェクトによって開発されたリンカー
GNU Gold[1]Googleによって開発されたldより高速なリンカー
LLVM lldLLVMプロジェクトによって開発されたldとGoldより高速なリンカー
moldLLVM lldのオリジナル作者の植山類氏によって開発された新しい高速リンカー
ld64[2]Appleによって開発された macOS/iOS(Darwin)向けの Mach-O リンカーで、Xcode に同梱されている
ld_prime[2]Appleによって開発された新しい高速リンカー、Xcode 15 以降に同梱されている

リンカーの仕事とは

さきほど、リンカーはオブジェクトファイルを結合すると説明しましたが、結合する際にいろいろな処理を行います。今回は詳細は省きますが、ざっくりと以下の処理があります。

この記事のつづきを読もう
新規登録/ログインしたらできること
  • すべての記事を制限なく閲覧可能
  • 限定イベントに参加できます
  • GitHub連携でスキルを可視化
ログイン
アカウントをお持ちでない方はこちらから新規登録