|
>2346 ゆきさんはじめまして iostream じゃなくて iostream.h、 string じゃなくて string.h だと思います。 h は Header に通常つく拡張子です。 |
|
とかいって、<iostream> だけの書き方もあるんですね。 手元の cpp ソースは、<iostream.h> でコンパイルできていたのを <iostream> だけにしたら同様のエラーが出たので、 「.h を付けてみる」をトライする価値はあると思いますが。 |
|
>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 結局のところ、うまくインストールできていないのではないかと思います。 |
|
はじめまして。yamaと申します。 Perlで困っています。 STDOUTの初期化の方法がわかりません。 print文にてhtmlを出力していますが、途中でエラーが発生 した場合、出力済みの情報を初期化し、エラーメセージを出力したい と考えています。 *STDOUT=""; としましたが、エラー表示以前の分も出力されます。 このようなことは不可能なのでしょうか。 プロバイダ環境はUNIXでApacheのサーバです。 なお、UNIX、Apache、Perlのバージョン 等詳しくは聞いていません。 |
|
>>2351 yama > このようなことは不可能なのでしょうか。 不可能です。stdout に出力したものは既に出力済かもしれませんし、 まだバッファに溜っているかもしれませんが、それをクリアする 方法はありません。出力済かどうかを判断する方法もありません。 # Java Servlet だとできるんですけどね。 というわけで、自前でバッファリングしましょう。 |
|
>>2352 68userさんへ お返事ありがとうございます。 「不可能」ですか。 ロジックを変更し、必要なチェックを先にするようにします。 今後ともよろしくご指導ください。 |
|
いつも、お世話になっています。ダウンロードについてなんですが、 .lzhのファイルをコンパイルすることは、UNIXではできるのでしょうか。 もしできるようであれば、ダウンロードの仕方を教えてください。 ちなみに、僕は「Solaris2.6」を使っています。お返事お願いします。 |
|
>2354 ゆうすけさん、はじめまして。 「lzh のファイルを UNIX でコンパイルする」 と言われると複数に解釈できて、 1)UNIX 上にある複数のファイルを固めて lzh の圧縮書庫を作る 2)どっかから持ってきた lzh の圧縮書庫を展開して、 その中の C とかのソースツリーをコンパイルする のどっちでしょう。 で、どっちもできます。ただし条件があって、お使いの Solaris に lha というプログラムがあるかどうかです。 コマンドラインで「lha」と打ち込んでみてください。 ある場合は使い方が表示され、ない場合は「ない」と起こられます。 で、ある場合はそれを使い、ない場合はインストールします。 で、使い方/インストールの仕方ですが、 とりあえず「lha」というコマンドの名前までわかったので、 あとは検索するなりしてがんばってみて、 どうしてもダメだったらまた聞いてください。 そのとき上の1)なのか2)なのかそれ以外なのかも教えてください。 >2350 68userさん、フォローありがとうございます。 ていうかいつもご苦労様です。 ちょっとでも負担を軽減しようとがんばってみたんですが 役に立たず、申し訳ありません ;;; |
|
>>2350 68userさんへ お返事ありがとうございました。下記2349の中で、私は勘違いな発言を していたようです。 >-lstdc++は、どうやら/usr/local/bin/libstdc++を見に行くように >指定しているようなのですが とありますが、違いますよね。libstdc++の中の、libstdc++.aという ライブラリファイルを見に行ってるということですね。ということは、 ---------------------------------------------------- hellocpp.cpp:1: iostream: No such file or directory hellocpp.cpp:2: string: No such file or directory ---------------------------------------------------- と言うエラーで見に行っているインクルードファイルは、自動的にリンク されなければならないということでしょうか。私の行ったインストールは どうもおかしいような気がしてきました。 ちなみに、こちらの環境は以下のようになっていました。 /usr/local/bin/libstdc++/iostream /usr/local/bin/libio/iostream.h /usr/local/bin/libstdc++/libstdc++.a libstdc++.so*は検索しても無いような状況でした。やはり再インストール をしてみようと思いますが、上記フォルダ階層はそもそも間違いで、 正しいインストール先というのは、インストール時に指定できるように なっているものなのでしょうか?何度も申し訳ありませんが、よければ その辺りのことを詳しくお教え願えませんでしょうか? よろしくお願い致します。 |
|
>>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 |
|
>>2337 aki おっと、見逃していました。 > /etc/groupのファイルのrootグループに追加するだけで > はいけないのでしょうか。 root グループにはなれますが、root にはなれません。 sudo など、setuid などで検索してみてください。 |
|
はじめましてkanjiと申します。コマンドのページを良く利用させて頂いています。感謝です。 UNIXの掲示板で、Linuxの質問をよろしいでしょうか。 本題の質問なのですが、初めてRedHat Linux7Jをインストールし、Webサーバの構築を考えています。 ですがPCMCIAのNWカードを認識してくれません。(3com 3c589Dを使用) そこでPCMCIAのドライバをインストールしようとpcmciacs.3.1.30.tar.gz を入手し、 #zcat pcmciacs.3.1.30.tar.gz | tar xvf - #cd pcmciacs.3.1.30.tar.gz #make config を行なうと、configエラーが出ます。ソースツリーが無いと言われます。 ソースツリーとはどのようなもので、どうやってインストールすれば良いのでしょうか。 よろしくお願い致します。 |
|
>>2359 kanji pcmciacs.3.1.30.tar.gz を展開した pcmciacs.3.1.30 以下のディレクトリ構造がソースツリーでは。 % cd pcmciacs.3.1.30.tar.gz ではなくて、 % cd pcmciacs.3.1.30 では? 〜.tar.gz は圧縮ファイルです。 cd は Change Directory です。 |
|
>>2360 ふくし > pcmciacs.3.1.30 以下のディレクトリ構造がソースツリーでは。 Linux も pcmcia も全然知りませんけど、 http://www.linux.or.jp/JF/JFdocs/PCMCIA-HOWTO-2.html などを見るに、カーネルソースを展開して、そこに pcmciacs*.tar.gz を 展開して、make config && make all && make install してモジュールを インストールすべきなのに、カーネルソースツリーが存在していないので エラーになってるんじゃないでしょうか。 >>2359 kanji > configエラーが出ます。 具体的にどういうエラーが出るかをちゃんと書けば、何が問題か わかる人にはわかるでしょう。 # 僕は残念ながら わからない人です。 |
|
>>2360 ふくし >>2361 68user すみません、わかりました。 ありがとうございました。 カーネルソースの展開が抜けているのでしょう。 早速やってみます。 |
|
初めまして、inabaと申します。 >>2359 kanji 3com だったら、ディフォルトで認識してくれると思いますが…。 ただ、network と pcmcia の起動順が逆なので失敗しているのかも。 # cd /etc/init.d # ./pcmcia restart # ./network restart と入力してみてください。 # ifconfig で、eth0 が認識されていませんか? 見当違いだったらすみません。 |