68user's page 掲示板

Prev< No. 2357> Next  [最新発言に戻る] [過去ログ一覧]
No. 2357 # 68user 2001/12/10 (月) 19:11:40
>>2356 ゆき
> libstdc++の中の、libstdc++.aというライブラリファイルを見に行ってる
> ということですね。
インクルードとリンクは全く別物です。インクルードファイルと
ライブラリには何の関係もありません。

> 自動的にリンクされなければならないということでしょうか。
インクルードファイルはリンクするものではなく、インクルードする
ものです。

-v を付けてコンパイルすると以下のようになります。

% g++ -v a.cpp
Using builtin specs.
gcc version 2.95.2 19991024 (release)
  /usr/libexec/cpp -lang-c++ -v -D__GNUC__=2 -D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -Di386 -Dunix -D__FreeBSD__=4 -D__FreeBSD_cc_version=420000 -D__i386__ -D__unix__ -D__FreeBSD__=4 -D__FreeBSD_cc_version=420000 -D__i386 -D__unix -Acpu(i386) -Amachine(i386) -Asystem(unix) -Asystem(FreeBSD) -D__EXCEPTIONS -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__ELF__ a.cpp /tmp/ccFhD943.ii
GNU CPP version 2.95.2 19991024 (release) (i386 FreeBSD/ELF)
#include "..." search starts here:
#include <...> search starts here: ← ここ★
  /usr/include/g++ ← ここ★
  /usr/include ← ここ★
  /usr/include ← ここ★
End of search list.
The following default directories have been omitted from the search path:
End of omitted list.
  /usr/libexec/cc1plus /tmp/ccFhD943.ii -quiet -dumpbase a.cc -version -o /tmp/cctFu943.s
GNU C++ version 2.95.2 19991024 (release) (i386-unknown-freebsd) compiled by GNU C version 2.95.2 19991024 (release).
  /usr/libexec/elf/as -v -o /tmp/ccvXl943.o /tmp/cctFu943.s
GNU assembler version 2.10.0 (i386-unknown-freebsd4) using BFD version 2.10.0
  /usr/libexec/elf/ld -m elf_i386 -dynamic-linker /usr/libexec/ld-elf.so.1 /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o -L/usr/libexec/elf -L/usr/libexec -L/usr/lib /tmp/ccvXl943.o -lstdc++ -lm /usr/lib/libgcc.a -lc /usr/lib/libgcc.a /usr/lib/crtend.o /usr/lib/crtn.o

★を付けた部分でインクルードファイルの取り込みが行われます。

この環境では、標準のインクルードファイルは /usr/include/g++、
/usr/include である、ということがわかります。そこにインクルード
ファイルが置いてあれば何もエラーは起こらないはずです。

で、★の部分が終わったら初めてライブラリが出てくるわけで
(ld がライブラリをリンクする)、★がうまくいかないのに
ライブラリが云々と悩むのはおかしいです。

> /usr/local/bin/libstdc++/iostream
> /usr/local/bin/libio/iostream.h
> /usr/local/bin/libstdc++/libstdc++.a
これはソースで、本来不要なファイルではないですか? /usr/local/bin/ に
ファイルを展開して、そこで make したんじゃないかと想像しますが。

> 上記フォルダ階層はそもそも間違いで、
おそらく間違いでしょう。

> 正しいインストール先というのは、インストール時に指定できる
> ようになっているものなのでしょうか?
ソースからコンパイルしたなら、make 時に指定することもできますが、
普通はデフォルトのディレクトリにインストールします。

とりあえず package を利用してはどうですか?
    ftp://SunSITE.sut.ac.jp/pub/sun-info/Solaris/sparc/2.5/gcc-2.95.3-sol25-sparc-local.gz

Prev< No. 2357> Next  [最新発言に戻る] [過去ログ一覧]