• ベストアンサー

gccに関する質問

gccを実行するときの引数に関する質問です。 gccでコンパイルするときはヘッダーファイルのパスや、ライブラリ(拡張子が、.soのやつ)を指定しますがヘッダーファイルの方は、ソースファイルでもインクルードしているくらいだし、なんとか探してパスを指定すればよいのですが、ライブラリの場合はヘッダファイルと違ってインクルードする物ではないので、名前わからないし検討もつきません。 ヘッダファイルに該当するライブラリを探す方法はあるのでしょうか?

  • tukai
  • お礼率57% (102/177)

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.4

/lib および /usr/lib に存在する全てのライブラリに対して nm すれば、ライブラリが strip されていない限り、使用した関数がどのライブラリで定義されているかを確認できると思います。 (ex.) nm /usr/lib/libc.so ただ、標準的な関数は全て libc や libm.so に含まれており、それ以外の関数を使うということであれば、普通はどのライブラリにその関数が含まれているかを知った上で使うものだと思いますが。

tukai
質問者

お礼

ありがとうございました。 その方法で問題は解決しました。

その他の回答 (3)

  • negi-bozu
  • ベストアンサー率25% (5/20)
回答No.3

一度コンパイルをしてみて、参照エラーが発生したら どの関数がリンクされていないかを覚えておき、 その関数が含まれるライブラリをネット等でさがします。 また、それらしきライブラリのアーカイブからファイル名を抽出してみます。

tukai
質問者

お礼

ありがとうございました。 今度試してみたいと思います

回答No.2

C言語であれば、おおかた libc.a で済んでしまうと思います。 数学的なものは(math.h由来)、libm.a です。 私は、色々なプログラムを書いていますが、-lm 以外のリンカオプション(ライブラリ指定)を使用したことがありません。 大したプログラムを書いているわけではありませんが、stdio.h、stdlib.h、string.h、memory.h、ctype.h 等でリンクエラーが出たことはありません。

tukai
質問者

お礼

参考になりました。 libc.aというライブラリでは、ソケットやプロセス(forkとかdeamonとか)の等でも大丈夫ですか?

回答No.1

コンパイルのときですか? -Lで探す場所を指定します。

tukai
質問者

お礼

質問の書き方が悪かったようですが、その「探す場所」をどうやって探すかの質問です。

関連するQ&A

  • 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の#includeパスの設定方法?

    RedHat Linux 8.0をインストールしています。adaptec社のAHA1542を使いたいのですが、自動認識してくれません。 色々調べた結果、/etc/modules.confに alias scsi_hostadapter aha1542.o を記述する事で、使用可能と言う事がわかりました。 しかし私のシステムでは、aha1542のソースとヘッダーファイルはありますが、オブジェクトがありません。 GCCにてコンパイルさせたら、大量のエラーメッセージが出力されます。ソースを見ると、 1) #include <linux/******.h> 2) #include <asm/*****.h> 3) #include "*****.h" と3種類の#include文があります。 3)は、ソースと同一ディレクトリーでOKだと思いますが、他の2種類のパスの設定方法がわかりません。 <linux/ <asm/ の部分を自分のシステムに合ったパスに置き換える(GCCに認識させる)には、どうすれば良いのでしょうか? どうか、宜しくお願い致します!

  • Linuxのgccのインクルードパス?

    Linuxのgccで、インクルードファイルやライブラリのパスを設定する方法が知りたいのですが、gccについて詳しい書籍やサイトがありましたら、教えてください。 gccとccの違いも知りたいです。 例) #include "example.h" このままだと、example.hが無いと表示されます。

  • gtkに関する質問

    GTKというライブラリで、ソースを書いてコンパイルした所 数え切れない程のエラーがでてしまう(実際のソースコードは10行未満)インクルードファイルに色々構文エラーがあるみたいですが、リンクに指定するライブラリを間違えたのでしょうか。 もし間違えたのならどのライブラリとリンクすれば良いのか教えてください。(これかなと思うライブラリを色々リンクしてみましたが無理でした) ちなみに、コンパイルしたOSはLinuxでTurboLinuxというディストリビューションです。 そしてコンパイルに使ったコマンドは下記の様に書きました gcc -o GTK gtk.c -I /usr/include/gtk -lgtk -L /usr/lib

  • (GCCコンパイラ)動的リンクを絶対パスで埋め込みたい

    Unix系のOSで 動的リンクを絶対パスで指定したいのですができますか? できる場合は、その方法を教えてください ※LD_LIBRARY_PATHを使う方法ではありません。 ※また、ソースを埋め込む静的リンクでもありません。 絶対パス(フルパス)で指定したいです 現在 gcc -Iインクルードパス -Lライブラリパス名 -lライブラリ名1 ... -o ソースコード ソースコード.cpp このように書いているので あと追加でどのように指定すると絶対パス(フルパス)で埋め込めるでしょうか? できれば、ライブラリ名1だけフルパスで埋め込みたいです。 よろしくお願いします

  • gccとmakefileの基礎

    makefileの作り方を1から紹介している 書籍はあるでしょうか? 現在、 a.cとb.hとc.a をgccでコンパイルしたいのですが わかりません(汗 gcc -o test a.c b.h c.a じゃだめみたいです。 要するに1つのcファイルと1つのヘッダファイルと1つのライブラリ(静的or動的)を コンパイルする方法が知りたいのです。 ご教授お願い致しますm(____)m

  • H8300-hms-gccでコンパイルできない

    H8マイコンの開発環境(C言語)をcygwinにインストー ルしましたが,h8300-hms-gccでコンパイルできません. ソースファイルが保存されているディレクトリでコンパ イルしてるにもかかわらず,No such file or directry となって,ソースファイルを認識しないのです.一方, 通常のgccではコンパイルできます. echo $PATHで確認しましたが,h8300-hms-gccが保存さ れている/usr/local/binへのパスは通ってます. 何が原因なのか全く分かりません. 宜しくお願いいたします. OSはWindows 2000です.

  • AIX gcc コンパイルエラーにつきまして

    お世話になります。 Severもcもまったくわからない初心者なのですが質問させていただきます。 Make.plを実行してsoファイルを書き換えたいのですが、実行すると下記のようなエラーが出て最後までMakeが実行できません。 <ccを指定してコンパイル> 1506-507 (W) 使用できるライセンスはありません。プログラム提供者に連絡して、追加ユーザーを追加してください。 すぐにコンパイルが行われます。 <gccを指定してコンパイル> installation problem, cannot exec `cc1plus' Makeを実行したいのですがどうしたらよいでしょうか。 gccでコンパイル、他のコンパイラでの対応方法などありましたらご教授頂けると幸いです。 (ccの場合ライセンス自体が切れているっぽいのでできれば避けたいと考えています) 漠然とした質問で申し訳ないのですがよろしくお願いいたします。 OS -> AIX v4.3 cc -> CforAIX v.6 gcc -> powerpc-ibm-aix4.3.2.0 v 2.95.3

  • なぜgccはstdio.hをインクルードしなくてもprintfが実行できるのか

    なぜgccはstdio.hをインクルードしなくてもprintfが実行できるのでしょうか。 暗黙にインクルードされるヘッダと されないヘッダファイルの差分等あれば教えていただきたく。。 // main.c int main(){ printf("SWSW\n") ; return 0 ; } % gcc main.c % ./a.out SWSW

  • Cygwinをいれました

    アルサイトからいれました、でもヘッダファイルがなくてgcc でコンパイルすると #include <stdio.h> #include <math.h> などで引っかかってコンパイルがとおりません。ヘッダファイルだけ欲しいのですが、どっからとってこれませんか?