• 締切済み

gccを使ってのリンク時のライブラリの指定法

gccを使って、c++の勉強を始めようとしています。 hello.cpp(どこにでもある一行のプログラム)のコンパイルはできましたが、リンクができません。 私の機械では iostream は /usr/include/c++/3.3.2 にあります。( iostream.hは /usr/include/c++/3.3.2/backward にあります。) また、makefileにこの情報を書くには、どのように書けばよいのでしょうか。

noname#22708
noname#22708

みんなの回答

  • colder
  • ベストアンサー率43% (30/69)
回答No.3

>c++の拡張子を持ったファイルはg++でコンパイルするのですか? g++でコンパイルすると、C++の標準ライブラリを勝手にリンクしてくれる。 gccでコンパイルするときは、-lstdc++でライブラリを明示的に指定しないといけない。

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

gccが正しくインストールされていないのではないですか? iostreamのような標準的なライブラリが置かれた場所は,指定しなくてもデフォルトで検索されるはずなのですが.

noname#22708
質問者

お礼

お教えいただきありがとうございます。gccは自分で個別にインストールしたものではなく、CDからシステム全体( Vine 3.2 ) をインストールしたままです。 とりあえずは、No.1の回答していただいたことで、解決しましたが、いろいろなライブラリがあるらしいので、どのように使うのか、さっぱりわかりません。

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.1

#include <iostream> int main(void) { using namespace std; cout << "hello, world" << endl; return 0; } をコンパイルリンクするなら、オプションは必要ありません。 g++ hello.cpp -o hello でいくはずです。 gcc hello.cpp -o hello とやっていませんか?

noname#22708
質問者

お礼

早速にお教えいただきありがとうございます。ご指摘のとおりで、gcc としていました。g++ に変更したらうまくできました。 g++ は gccに統合されたと読んだものですので。 c++の拡張子を持ったファイルはg++でコンパイルするのですか?

関連するQ&A

  • GCCでライブラリが足りない

    はじめまして。 LindowsOS4.0を使っています。 コンパイルができずに困っています。 GCCとMAKEをインストールしました(Lindowsはどちらも入っていないのです。Debian/Woodyベースと言われています)。 gcc 2.95.4 make 3.79.1 which gcc とすると、/usr/bin/gcc と表示されます。 で、./configure すると、 ..... checking whether the C compiler works ... no と表示されコンパイルエラーになります。 configure.log を見ると、 ------------------- checking for gcc configure:916: checking whether the C compiler (gcc ) works configure:932: gcc -o conftest conftest.c 1>&5 /usr/bin/ld: cannot open crt1.o: No such file or directory collect2: ld returned 1 exit status configure: failed program was: #line 927 "configure" #include "confdefs.h" main(){return(0);} --------------------- とか --------------------- checking for gcc configure:905: checking whether the C compiler (gcc ) works configure:921: gcc -o conftest conftest.c 1>&5 /usr/bin/ld: cannot open crt1.o: No such file or directory collect2: ld returned 1 exit status configure: failed program was: #line 916 "configure" #include "confdefs.h" main(){return(0);} ---------------------- とかなっています。 confdefs.hというのは何かのライブラリなのでしょうか?これが無いとconfigureできないのでしょうか?? よろしくお願いいたします。

  • C++でコンパイルするとwarningが出ます

    C++初心者です。 C++でコンパイルすると以下のようなwarningメッセージが出るのですが、どういう意味なんでしょうか?解決策があれば教えてください。 プログラム(sample.cpp) #include <iostream.h> main(){ cout << " sample \n"; } warningメッセージ In file included from /usr/include/c++/3.3.1/backward/iostream.h:31, from sample.cpp:1: /usr/include/c++/3.3.1/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider usin g one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <s stream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated

  • KPIT GCCでno include path

    H8のKPIT GNU Tools (v11.02, Windows版) を使ってmakeしたところ、 "no include path in which to search for stdio.h" とエラーが出ます。 エラーの出た行の内容は、 #include <stdio.h> であり、これでエラーが出る理由がわかりません。 試しに、("#include <stdio.h>"を用いる) hello.cを作って、h8300-elf-gccでコンパイルしたところ、特にエラーもなくコンパイルできました。 インクルードパスがおかしいのかとも思いますが、Makefileにはその設定は指定してませんので、デフォルト状態のはずです。 どうぞよろしくお願いします。

  • cygwinのgccが、エラーになってしまいます。

    テストプログラム $ cat test.c #include <stdio.h> int main (void) { printf("Hello, World!\n"); return 0; } これを、コンパイルすると $ gcc test.c gcc: error trying to exec '/usr/lib/gcc/i686-pc-cygwin/4.5.3/cc1.exe': execv: Bad address /usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../libcygwin.a(libcmain.o):(.text+0xba): undefined reference to `_WinMain@16' collect2: ld はステータス 1 で終了しました と、このようなエラーが出てきました。 ファイルを確認しても、何も作られていません。 $ ls test.c 対処方法を、ご教示願います。

  • octaveのコンパイルオプション

    MATLABのクローンのoctaveを, C++のライブラリとして利用したいと考えているのですが, コンパイルが上手くいきません. プログラムは以下のような単純なものです. --------- begin of hello.cpp ------------------ #include<iostream> #include<octave/config.h> #include<octave/Matrix.h> int main(){ Matrix m(2,2,1.0); cout<<"hello octave !"<<m; return 0; } --------- end of hello.cpp -------------------- 次のようなコンパイルオプションでコンパイルしています. > g++ -I/usr/include/octave-2.1.35/ -L/usr/lib/octave-2.1.35 \ -loctave -lcruft -loctinterp -lreadline -lcurses -llapack \ -lblas -ldl -lg2c -L/home/pippin/name/.redhat/SOURCES/octave-2.1.35/kpathsea \ -lkpathsea hello.cpp すると,次のようなエラーメッセージを返されます. /tmp/ccuvk2IV.o: In function `main': /tmp/ccuvk2IV.o(/text+0x2c): multiple definition of `main' /usr/lib/gcc-lib/i386-redhat-linux/2.96/libg2c.a(main.o)(.text+0x0): first definition here /usr/bin/ld: Warning: size of symbol `main' changed from 58 to 174 in /tmp/ccuvk2IV.o collect2: ld returned 1 exit status エラーメッセージから解するに,libg2c.aでもmain関数が定義されているため, hello.cppのmain関数とかぶるという様な事だと思うんですが,ライブラリに main関数が定義されているというのも変な話です. ちなみに,コンパイルした環境は, OS: redhat linux 7.3 octave version 2.1.35 gcc version 2.96 このタイプのエラーを回避する方法を知っておられる方は, 回答の方よろしくお願いします.

  • C++, strcpy の warning.

    VC2005 Express Edition を使ってます。 #include <iostream> #include <string> using namespace std; int main() {   char str[10] = "hello";   strcpy(str, "HELLO"); } ↑ こちらをコンパイルすると hello.cpp .\hello.cpp(8) : warning C4996: 'strcpy' was declared deprecated C:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(73) : see declaration of 'strcpy' という警告が出るのはどうしてでしょうか? #include <string.h> も試したのですが同じ警告でした。

  • iostreamについて

    今までOSはTurbo Linux 7を使っていましたが、最近RedHatLinux9にかえました。 それで、今までは普通に出来ていたことが出来なくなったので質問します。どちらかと言うとプログラム系の亊ですけど、Windowsではこんなことは起きないのでここで質問します。 C++でプログラムを作っているのですけど、 プログラム中で<iostream.h>,<fstream.h>をインクルードしていて、コンパイルすると /usr/include/c++/3.2.2/backward/fstream.h:31 から include されたファイル中, stereo_draw.cpp:4 から: /usr/include/c++/3.2.2/backward/backward_warning.h:32:2: 警告: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated. と言うエラーメッセージが出るのです(stereo_draw.cppは私の作ったソースファイル)。 英語が得意ではないので訳があやしいですが、 『このファイルは推奨してない、または古いヘッダーをインクルードしています。C++スタンダードセクション17.4.1.2中の32ヘッダーのいづれかを使うことを推めます。例えば<X.h>の代わりにC++インクルード用の<X>ヘッダーをインクルードするとか、非推奨の<strstream.h>の代わりに<sstream>を使うなど』 と言っているのではないかと思います。でも、セクション17.4.1.2の32個のヘッダーなんて知らないです。それに、Turboの時はこんなメッセージは出ませんでした。 これを解決する方法をどなたか知っていたら教えて下さい。

  • gccでの共有ライブラリのver指定

    表題の件に関して質問させていただきます。 たとえば/usr/libにある;libA.soをリンクしたい時、gccでは gcc -lA としますが、libA.so.1,libA.so.2‥と複数バージョンがある場合、バージョンまで指定してコンパイルすることは可能でしょうか? サーバー権限を持っていないので、シンボリックリンクを張り直すという手は使えません。 また、自分のアカウントで同共有ライブラリを用意したのですが、/usr/libが優先されてしまい、自分のアカウントのライブラリを設定することは出来ません。 解決法をご存知の方、ご教授お願い致します。

  • bccは分かりましたがgccが使えません

    Cのソースの#include <stdio.h>でエラーになります。 gccではbccのbcc32.cfgで行うような設定はどのようにすればよいですか? MINGWのコンソールで $ echo $C_INCLUDE_PATH c:/msys/1.0/mingw/include;c:/msys/1.0/mingw/lib/gcc/mingw32/3.4.5/include このように出ます。 $ gcc myapp.c で#include <stdio.h>の行でコンパイルエラーです。 MINGWでは$C_INCLUDE_PATHを正しく設定できているみたいですが、gcc.exeにそれが伝わっていないみたいです。 AUTOEXEC.BATには何も追記したくないので何も追記していません。 どうすればライブラリのパスを通せますか?

  • gccでの分割コンパイルについて

    参考書に分割コンパイルの方法が書いてなかったので質問させていただきます。 現在3つのソースファイルがあります。 1.header.h (関数プロトタイプ宣言) 2.kansu.c  (関数の定義) 3.main.c  (main()関数) ここで、main.cがheader.hをincludeしています。 このときの分割コンパイルはどのようにしたら良いのでしょうか?Makefileを作成するのでしょうか? 自分自身分割コンパイルの経験はありません。 環境は Cygwinを使ってのWindows XP コンパイラはgcc もうひとつは Visual Studio.netを使っての環境です。

専門家に質問してみよう