GCC -print-file-nameオプションの使い方 | Linuxで組込ソフトを開発するための初心者向けガイド

このQ&Aのポイント
  • GCC -print-file-nameオプションを使用すると、絶対パスを含むファイル名が表示されない問題が発生しています。設定不足が原因かもしれません。
  • 組込ソフトを開発する際にGNU Compiler Collection(GCC)の-print-file-nameオプションを使用する方法について、初心者向けのガイドです。
  • Linuxの初心者がVMware上のFedoraCoreで組込ソフトを開発している中で、arm-linux-gccの-print-file-nameオプションを使用する際にファイル名の表示がされず、その解決策を求めています。
回答を見る
  • ベストアンサー

gcc -print-file-nameオプション

Linuxの初心者です。 VMwareで動作するFedoraCoreで組込ソフトを開発しようとしています。 arm-linux-gcc -print-file-name=crt1.o を実行すると crt1.o とファイル名だけ表示されます。 書籍等では /usr/lib/crt1.o と絶対パスで表示されると書かれているのですが -print-file-name でパスが表示されないのは何か設定不足があるのでしょうか? こちらで行ったのはprofile.dにarm-linux-gccのbinとusr/binにパスを設定するファイルをおいただけです。 超初歩的なミスなのかもしれませんが、知恵を貸して頂けると幸いです。

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

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

> 書籍等では /usr/lib/crt1.o と絶対パスで表示されると書かれているのですが > -print-file-name でパスが表示されないのは何か設定不足があるのでしょうか? そういうものです。 gcc -print-file-nameはgcc -print-search-dirsで表示されるディレクトリを順 に検索し、見つかったファイルを表示します(asとldだけはコンパイル時に指定 された特別なディレクトリを真っ先に検索します)。検索パス上に見つからない 場合はそのままの値を返します。 crt1.oは検索パス上にないのでcrt1.oと表示されます。それは正しい動作です。 書籍の結果が違うのはバージョンの問題なのか誤植なのか・・・。 そういったところです。

black_lion
質問者

お礼

-print-search-dirs で表示されるフォルダにcrt1.o等のリンクエラーになるファイルをコピーしたら正常にリンクが通りました。 ありがとうございました。

black_lion
質問者

補足

ありがとうございます。 -print-search-dirsで調べたらcrt1.oのあるフォルダは検索対象になっていませんでした。 ちなみに検索パスには後で追加は出来ないのでしょうか? crt1.oは必ず必要なものだと思いますので -Lオプションでライブラリのパスを指定しなくてもリンク出来る様にしたいのですが・・・

関連する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できないのでしょうか?? よろしくお願いいたします。

  • gccできない

    Linux初心者です。 vmware上でubuntuのOSを動作させ、 ターミナルから gcc <作成したファイル>.c と実行すると、 /usr/bin/gcc: cannot execute binary file と出力されます。 /usr/bin/gccの実行権は確認しましたが、 問題ありませんでした。 何か理由として考えられるものはないでしょうか? 曖昧な質問ですいません。 補足として、 Hacking:美しき策謀用のLiveCDをvmwareにインストールして使用しています。

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

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

  • gcc3.3.2のインストールについて

    Solaris9の初心者です。現在OSのインストールから行っている段階で、OSインストール完了後、ホームページなどを参考にgcc3.3.2をインストールしました。 pkgadコマンドでインストールし最終的に”<SMC gcc>のインストールに成功しました”と表示されました。 whichコマンドでgccが正常にインストールされたか確認したところ”no gcc in /usr/sbin /usr/bin”と表示されました。”#gcc -v”では”gcc:not found”となります。インストール後、まだ何か設定する箇所があるのでしょうか?

  • 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です.

  • gccの使いかたについて

    CentOS5.5をインストールしgccコマンドでコンパイラを起動しようとしても起動しません。 rpmコマンドでgccがインストールされているか確かめると、 libgcc-4.1.2-48.el5 と反応がありました。 もしかしたらPATHが通っていないのかと思い which gcc を入力するとやっぱり通っていませんでした。 そこでお尋ねしたいのですが、どう設定すればgccコマンドが使えるようになるでしょうか? Linux初心者ですので手順をおって説明してくださればうれしいです。 よろしくお願いいたします。

  • gccのインクルードパスの確認

    #include <stdio.h> は デフォルトのインクルードパス(/usr/include/)からstdio.hファイルを 探しますよね? http://oshiete1.goo.ne.jp/kotaeru.php3?q=2006018 ここに書いてあるように gcc -print-search-dirs を実行してみたのですが、/usr/include の記述は 含まれていませんでした。 http://www.sra.co.jp/wingnut/gcc/gcc-j.html で-print-search-dirsのオプションの意味を見てみましたがよくわかりませんでした。

  • gcc@MinGW:外部コマンドの起動

    MSYS2/MinGW64 on Windows10 の環境で gcc 開発をしています。 下記の簡単なソースを用意します。 #include <stdio.h> #include <stdlib.h> void main() { system("/usr/bin/ls"); exit(0); } なお、/usr/bin/ls の存在は、   $ which ls ↓   /usr/bin/ls にて確認しています。 これを /mingw64/bin/gcc でコンパイルして実行すると、 '/usr/bin/ls' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 と表示され、明らかに存在するはずの ls コマンドが起動されません(上記エラーメッセージ中のマルチバイト文字はなぜか cp932 で表示されています)。 ところが、同じソースを /usr/bin/gcc でコンパイルすると、問題なく実行されるのです。 MSYS2 と MinGW の関係がよく理解できていないこともあり、どうしてこのようなことが起こるのか理解に苦しんでいます。 どなたかお心当りのあるかた、お教え下されば幸いです。

  • rubyのファイルを実行できません。

     Debian(Woody)の環境です。 #find ./ -name ruby ./usr/bin/ruby ./usr/share/doc/ruby ./usr/doc/ruby ./usr/lib/ruby があり、/usr/binにrubyのファイルが確認できます。 $ruby -v ruby 1.6.7 (2002-03-19) [i386-linux] が出ます。pathが通っています。 $ ruby -e 'print "hello World\n"' で hello World もちゃんどでます。 しかし、vi hello.rbで、中には ------------------- #!/usr/bin/ruby print "Hello World!\n" --------------------- と、実行権-rwxr-xr-xにします。 %hello.rb では: bash: hello.rb: command not found が出て,実行できませんでした。 ファイルの中に、#!/usr/lib/rubyに代えてもおなじでした。  因みに %env で ... PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11 ... がでます。  アドバイスをよろしくお願いします。

    • 締切済み
    • CGI
  • eclipseでC言語がコンパイルできない

    cigwinを先日入れてeclipseでC言語開発をしようと思ったんですが、 Hello Worldを実行しようとすると、 ・Program "g++" not found in PATH ・Program "gcc" not found in PATH というエラーがでます。 gcc,g++がPATHにないよ、といっているようですが、 これはどのように解決したらいいのでしょうか? cigwinでgcc,g++の場所を確認すると/usr/bin/gcc, /usr/bin/g++とありました。 インストールはされているようです。 環境変数の方もシステム環境変数、ユーザ環境変数両方に、 C:\cygwin\bin;C:\cygwin\usr\bin;C:\cygwin\usr\local\bin と指定しています。 何かPATHの設定を間違っているのでしょうか? それともeclipseの設定でしょうか?

専門家に質問してみよう