ld – GNU リンカ

ビルド
スポンサーリンク

ld コマンドは、GNU Binutils に含まれる リンカ で、オブジェクトファイル(.o)やライブラリを結合して実行可能ファイルや共有ライブラリを生成するために利用されます。
通常は gccg++ が内部的に ld を呼び出しますが、低レベルで制御したい場合に直接使用します。

構文(Syntax)

ld [オプション] <オブジェクトファイル>... -o <出力ファイル>

主なオプション一覧

オプション説明使用例
-o <file>出力ファイル名を指定ld main.o -o main
-L<dir>ライブラリ検索パスを追加ld main.o -L./lib -lmylib -o main
-l<name>ライブラリをリンクld main.o -lc -o main
-rリロケータブルなオブジェクトを生成(中間リンク)ld -r a.o b.o -o ab.o
-static静的リンクを行うld main.o -static -o main
-shared共有ライブラリを生成ld -shared -o libfoo.so foo.o bar.o
-Map <file>リンクマップを出力ld main.o -o main -Map map.txt
-dynamic-linker <path>動的リンカを指定ld main.o -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o main

実行例

オブジェクトファイルから実行ファイルを作成

ld main.o -lc -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o main

(標準 C ライブラリを手動でリンク)

複数のオブジェクトファイルを結合

ld a.o b.o -lc -o ab

静的リンクで実行ファイルを作成

ld main.o -static -o main

共有ライブラリを作成

ld -shared -o libfoo.so foo.o bar.o

リロケータブルオブジェクトを生成

ld -r a.o b.o -o combined.o

リンクマップを出力

ld main.o -o main -Map linkmap.txt

エラー例(ライブラリ不足)

ld main.o -o main

出力例:

ld: warning: cannot find entry symbol _start; defaulting to 0000000000401000
ld: main.o: in function `main':
main.c:(.text+0x15): undefined reference to `printf'

関連コマンド

  • gcc / g++ : コンパイル+リンクをまとめて行う(通常はこちらを利用)。
  • as : GNU アセンブラ。
  • objdump : バイナリを解析するツール。

備考

  • ld を直接使う場合、標準ライブラリや動的リンカを 明示的に指定 する必要があります。
  • 実際の開発では gcc / g++ を介して使うのが一般的で、ld を直接操作するのはカーネル開発や特殊なビルドシステムで多いです。
  • エントリーポイント(デフォルト _start)を指定しないと動作しないことがあります。

参考

スポンサーリンク
Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント