5

gccがそれに付属するヘッダーを見つけられないことが原因と思われる問題が発生しています。C / GCCについてあまり知らなかったので、コンパイラが常にこれらのヘッダーを見つけることができるはずであるという安全な仮定であるかどうかを確認したいと思いました。おそらく、-I引数を設定すると、これが上書きされますか?または何か他のファンキー?

元の問題は、 githubののこの問題にあります。

元の問題

やあ !他の問題で述べられているように、非llvm gccを使用して10.8でビルドし、rakefileを少し調整して、正しいsdkを正しい場所にフェッチしようとしました。

しかし

それでもコンパイルされません。

これがエラーレポートの始まりです(本当に長いです)

 new-host-2:shoes benjamingattet$ rake
 gcc -I. -c -o shoes/app.o -Wall -I/usr/local/include -I/usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin12.0.0 -I/usr/local/Cellar/ruby/1.9.3-p194/include/ruby-1.9.1 -I/usr/local/Cellar/ruby/1.9.3-p194/include/ruby-1.9.1/x86_64-darwin12.0.0 -O -DRUBY_1_9 -DSHOES_QUARTZ -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -fpascal-strings -Os -w -pipe -march=core2 -msse4.1 -mmacosx-version-min=10.8 -fno-common -x objective-c -fobjc-exceptions -isysroot /Developer/SDKs/MacOSX10.8.sdk -arch x86_64 shoes/app.c
 shoes/app.c:5:18: error: glib.h: No such file or directory
 In file included from shoes/app.c:6:
 ./shoes/app.h:13:19: error: cairo.h: No such file or directory
 In file included from /usr/local/Cellar/ruby/1.9.3-p194/include/ruby-1.9.1/ruby.h:32,
 from ./shoes/app.h:14,
 from shoes/app.c:6:
 /usr/local/Cellar/ruby/1.9.3-p194/include/ruby-1.9.1/ruby/ruby.h:48:21:
 error: string.h: No such file or directory
 /usr/local/Cellar/ruby/1.9.3-p194/include/ruby-1.9.1/ruby/ruby.h:58:21:
 error: stdint.h: No such file or directory
 /usr/local/Cellar/ruby/1.9.3-p194/include/ruby-1.9.1/ruby/ruby.h:61:23:
 error: inttypes.h: No such file or directory
 /usr/local/Cellar/ruby/1.9.3-p194/include/ruby-1.9.1/ruby/ruby.h:64:20:
 error: stdarg.h: No such file or directory
 /usr/local/Cellar/ruby/1.9.3-p194/include/ruby-1.9.1/ruby/ruby.h:65:19:
 error: stdio.h: No such file or directory
 In file included from /usr/local/Cellar/ruby/1.9.3-p194/include/ruby-1.9.1/ruby/ruby.h:67,
 from /usr/local/Cellar/ruby/1.9.3-p194/include/ruby-1.9.1/ruby.h:32,
 from ./shoes/app.h:14,
4

2 に答える 2

5

gcc には、検索するディレクトリのリストが組み込まれています。また、次のようなファイルstddef.hは、これらのディレクトリのいずれかにある必要があります。そのリストを取得する方法は、ファイル (空のファイルでも) を --verbose でコンパイルすることです。たとえば、次のようになります。

$ touch foo.c
$ gcc --verbose -c foo.c
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5.1' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1) 
COLLECT_GCC_OPTIONS='-v' '-c' '-mtune=generic'
 /usr/lib/gcc/x86_64-linux-gnu/4.4.3/cc1 -quiet -v foo.c -D_FORTIFY_SOURCE=2 -quiet -dumpbase foo.c -mtune=generic -auxbase foo -version -fstack-protector -o /tmp/cc2QEK5o.s
GNU C (Ubuntu 4.4.3-4ubuntu5.1) version 4.4.3 (x86_64-linux-gnu)
    compiled by GNU C version 4.4.3, GMP version 4.3.2, MPFR version 2.4.2-p1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../x86_64-linux-gnu/include"
ignoring nonexistent directory "/usr/include/x86_64-linux-gnu"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.4.3/include
 /usr/lib/gcc/x86_64-linux-gnu/4.4.3/include-fixed
 /usr/include
End of search list.
GNU C (Ubuntu 4.4.3-4ubuntu5.1) version 4.4.3 (x86_64-linux-gnu)
    compiled by GNU C version 4.4.3, GMP version 4.3.2, MPFR version 2.4.2-p1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 462394bb0ac77cba16b6fb6b32589358
COLLECT_GCC_OPTIONS='-v' '-c' '-mtune=generic'
 as -V -Qy -o foo.o /tmp/cc2QEK5o.s
GNU assembler version 2.20.1 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.20.1-system.20100303
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.4.3/:/usr/lib/gcc/x86_64-linux-gnu/4.4.3/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.4.3/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.4.3/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.4.3/:/usr/lib/gcc/x86_64-linux-gnu/4.4.3/:/usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../:/lib/:/usr/lib/:/usr/lib/x86_64-linux-gnu/
COLLECT_GCC_OPTIONS='-v' '-c' '-mtune=generic'

気になる部分は

ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../x86_64-linux-gnu/include"
ignoring nonexistent directory "/usr/include/x86_64-linux-gnu"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.4.3/include
 /usr/lib/gcc/x86_64-linux-gnu/4.4.3/include-fixed
 /usr/include
End of search list.

組み込みパスに存在しないディレクトリがいくつかあり、両方の種類の include ディレクティブの既存のディレクトリのリストがあることがわかります。

gcc がコンパイルされた場所とは別の場所にインストールされている場合、以前は問題がありました。しかし、最近のgccはこれらの状況でより堅牢であり、実行可能パスから始まるというISTR。

少なくとも、gcc がファイルを探している場所を知っていて、なぜそこにないのかを理解しようとするかもしれません。

gcc には完全な C ライブラリが付属していないことに注意してstddef.hくださいstdarg.h

于 2012-12-29T10:21:29.413 に答える