68user's page 掲示板

Prev< No. 2347〜2352> Next  [最新発言に戻る] [過去ログ一覧]
No. 2347 # ふくし [E-mail] 2001/12/07 (金) 21:08:54
>2346 ゆきさんはじめまして
iostream じゃなくて iostream.h、
string じゃなくて string.h だと思います。
h は Header に通常つく拡張子です。

No. 2348 # ふくし [E-mail] 2001/12/07 (金) 22:42:14
とかいって、<iostream> だけの書き方もあるんですね。
手元の cpp ソースは、<iostream.h> でコンパイルできていたのを
<iostream> だけにしたら同様のエラーが出たので、
「.h を付けてみる」をトライする価値はあると思いますが。

No. 2349 # ゆき 2001/12/09 (日) 01:32:16
>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もあったと認識して
よろしいのでしょうか?もしそうなら、それらが入っていない私の
環境は、やはりインストール時の失敗ということでしょうか・・・

もしよろしければ、お教え頂けませんか?よろしくお願い致します。

No. 2350 # 68user 2001/12/10 (月) 11:00:48
>>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

結局のところ、うまくインストールできていないのではないかと思います。

No. 2351 # yama 2001/12/10 (月) 12:45:31
はじめまして。yamaと申します。
Perlで困っています。
STDOUTの初期化の方法がわかりません。
print文にてhtmlを出力していますが、途中でエラーが発生
した場合、出力済みの情報を初期化し、エラーメセージを出力したい
と考えています。
*STDOUT="";
としましたが、エラー表示以前の分も出力されます。
このようなことは不可能なのでしょうか。
プロバイダ環境はUNIXでApacheのサーバです。
なお、UNIX、Apache、Perlのバージョン
等詳しくは聞いていません。

No. 2352 # 68user 2001/12/10 (月) 13:07:35
>>2351 yama
> このようなことは不可能なのでしょうか。
不可能です。stdout に出力したものは既に出力済かもしれませんし、
まだバッファに溜っているかもしれませんが、それをクリアする
方法はありません。出力済かどうかを判断する方法もありません。

# Java Servlet だとできるんですけどね。

というわけで、自前でバッファリングしましょう。

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