Section Next |Prev


2.3 ld(1) (ローダ)

【機能説明】
コマンド ld はシンボルの決定、ライブラリの参照を行い、 複数のオブジェクトプログラムを連結し1つの実行イメージを生成します。
また C, FORTRAN 等のプログラムを作成する場合は、 初期化モジュール(ランタイムスタートアップ: /usr/lib/crt*.o ) を リンクする必要があります。
ただし CC コマンドは予めこれらのモジールをリンクする よう ld に指示しています。

【入力フォーマット】
ld [オプション][ファイル名....]

【主なオプション】
ooutput-file
出力ファイル名(output-file)を指定します。
lx
標準ライブラリ x を参照します。
x には参照するライブラリ名の省略形を指定します。 たとえば -labc は libabc.a または libabc.so を検索します。
ライブラリ検索では以下のディレクトリを順に検索します。
  1. /usr/DISTORIBUTION/lib (ex. /usr/i386-asianux-linux/lib )
  2. /usr/lib/
  3. /usr/local/lib
  4. /lib
【実行例】
CC を使わずに C プログラムをリンクする
	# 先の例題サンプルプログラム
	$ cat sample.c
	main(){ puts("Linux");}

	# オブジェクトファイル作成までを行う
	# オブジェクトファイル名は .c を .o に代えた物
	$ cc -c sample.c

	# 実行ファイル作成
	$ ld -o sample sample.o /usr/lib/libc.a
	ld: warning: cannot find entry symbol _start; defaulting to 080480a0

	$ ./sample
	Linux!
	セグメンテーション違反です

	# Cプログラム実行に必要なライブラリを追加
	$ ld -o sample sample.o /usr/lib/crt*.o /usr/lib/libc.a
	$ ./sample
	Linux!
補足
ld が取り込んだオブジェクトや、ライブラリを表示するには --verbose オプションを用います。
$
$ ld --verbose -o sample sample.o /usr/lib/crt*.o /usr/lib/lib
GNU ld version 2.15.92.0.2 20040927
  Supported emulations:
   elf_i386
   i386linux
using internal linker script:
==================================================
/* Script for -z combreloc: combine and sort reloc sections */
OUTPUT_FORMAT("elf32-i386", "elf32-i386",
	      "elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(_start)
SEARCH_DIR("/usr/i386-asianux-linux/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");
/* Do we need any of these for elf?
   __DYNAMIC = 0;    */
SECTIONS
{
  /* Read-only sections, merged into text segment: */
  PROVIDE (__executable_start = 0x08048000); . = 0x08048000 + SIZEOF_HEADERS;
  .interp	  : { *(.interp) }
  .hash		  : { *(.hash) }
  .dynsym	  : { *(.dynsym) }
  .dynstr	  : { *(.dynstr) }
  .gnu.version	  : { *(.gnu.version) }
  .gnu.version_d  : { *(.gnu.version_d) }
  .gnu.version_r  : { *(.gnu.version_r) }
  .rel.dyn	  :
    {
      *(.rel.init)
			: (中略)
  /* SGI/MIPS DWARF 2 extensions */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames  0 : { *(.debug_varnames) }
  /DISCARD/ : { *(.note.GNU-stack) }
}
			: (中略)
==================================================
attempt to open sample.o succeeded
sample.o
attempt to open /usr/lib/crt1.o succeeded
/usr/lib/crt1.o
attempt to open /usr/lib/crti.o succeeded
/usr/lib/crti.o
attempt to open /usr/lib/crtn.o succeeded
/usr/lib/crtn.o
attempt to open /usr/lib/libc.a succeeded
(/usr/lib/libc.a)libc-start.o
(/usr/lib/libc.a)check_fds.o
			: (中略)
(/usr/lib/libc.a)strncase_l.o
(/usr/lib/libc.a)dl-sym.o


Section Next |Prev

copyright ycosSystems 2007, prgBasic/Body23.html