|
>2348 ふくしさんへ お返事ありがとうございます。土曜は会社に行っていないため、教えて 頂いたことはまだ試していないのですが、日曜に休日出勤(サービス) でもして試してみようかと思います。ところで、申し訳ありませんが、 もしご存知であれば、もう少し教えて頂けないでしょうか。 今回、私にソースを渡した人は、Linux環境で試したらしいのですが、 コンパイル時は gcc -lstdc++ -o hello hellocpp.cpp というふうにしろと言っています。調べてみるとオプション-lは、 ライブラリファイルへのリンクだと知りました。こちらのマシーンを 覗いてみますと、-lstdc++は、どうやら/usr/local/bin/libstdc++を 見に行くように指定しているようなのですが、これがファイルではなく、フォルダなのです。そういうことで、よろしいんでしょうか? しかし、仮にlibstdc++フォルダを見に行くとしても、libstdc++直下 には、iostream(.h)もstring(.h)もありません。これらは、 usr/local/bin/libioというフォルダの中にありました。 ふくしさんは、iostream.hとすると上手くいったということですが、 libstdc++フォルダの中に、iostream.hもstring.hもあったと認識して よろしいのでしょうか?もしそうなら、それらが入っていない私の 環境は、やはりインストール時の失敗ということでしょうか・・・ もしよろしければ、お教え頂けませんか?よろしくお願い致します。 |
|
>>2348 ふくし > とかいって、<iostream> だけの書き方もあるんですね。 C++ はよく知りませんが、namespace 対応の C++ コンパイラならば .h を省略できるはずです。 gcc は長らく namespace への対応がダメダメでしたが、少なくとも gcc-2.95.3 では OK です。 で、iostream はヘッダファイルです。libstdc++ はライブラリです。 ヘッダファイルがないと言われているのにライブラリのことを気に するのは間違っています。 >>2349 ゆき > これらは、usr/local/bin/libioというフォルダの中にありました。 それはライブラリのソースでしょう。それが /usr/local/bin/ に あるのはおかしいです。 > コンパイル時は gcc -lstdc++ -o hello hellocpp.cpp というふうに > しろと言っています -lstdc++ は不要です。C で -lc が不要なのと同じで、わざわざ指定 しなくても勝手に libstdc++ はリンクされます (指定してもいいですが)。 > -lstdc++は、どうやら/usr/local/bin/libstdc++を見に行くように > 指定しているようなのですが どうしてそのように判断しましたか? 普通 -lhoge とすると /usr/lib/libhoge* というファイルがリンクされます。 手もとの環境を見てみると、ヘッダファイルとライブラリは以下の 場所に置いてありますので、参考にしてみて下さい。 Solaris8 + gcc-2.95.2 /opt/sfw/include/g++-3/iostream /opt/sfw/include/g++-3/iostream.h /opt/sfw/lib/libstdc++.a.2.10.0 /opt/sfw/lib/libstdc++.so.2.10.0 FreeBSD + gcc-2.95.2 /usr/include/g++/iostream /usr/include/g++/iostream.h /usr/lib/libstdc++.a /usr/lib/libstdc++.so Linux + gcc-2.95.2 /usr/include/g++-3/iostream /usr/include/g++-3/iostream.h /usr/lib/libstdc++-libc6.1-2.a.3 /usr/lib/libstdc++-libc6.1-2.so.3 結局のところ、うまくインストールできていないのではないかと思います。 |