我使用各种stdlib函数,如srand()等。
#include <stdlib.h>
在我的密码顶端。
我在命令行中输入了以下内容:
# find / -name stdlib.h find: `/home/dmurvihill/.gvfs: permission denied /usr/include/stdlib.h /usr/include/bits/stdlib.h
因此,stdlib.h显然在/usr/include中。
我的预处理器:
# gcc -print-prog-name=cc1 /usr/libexec/gcc/x86_64-redhat-linux/4.5.1/cc1
我的预处理器的默认搜索路径:
# /usr/libexec/gcc/x86_64-redhat-linux/4.5.1/cc1 -v ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.5.1/include-fixed" ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.5.1/../../../../x86_64-redhat-linux/include" #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/lib/gcc/x86_64-redhat-linux/4.5.1/include /usr/include End of search list.
因此,stdlib.h显然在/usr/include中,这肯定是由我的预处理器搜索的,但我仍然会得到这个错误!
/path/to/cpa_sample_code_main.c:15:20: fatal error: stdlib.h: No such file or directory compilation terminated
更新
我编写了一个程序来测试这段代码:
#include <stdio.h> #include <stdlib.h> #include <linux/time.h> int main() printf("Hello, World!\n"); printf("Getting time...\n"); time_t seconds; time(&seconds); printf("Seeding generator...\n"); srand((unsigned int)seconds); printf("Getting random number...\n"); int value = rand(); printf("It is %d!",value); printf("Goodbye, cruel world!"); return 0; }
命令
gcc -H -v -fsyntax-only stdlib_test.c
输出
Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.5.1/lto-wrapper Target: x86_64-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,lto --enable-plugin --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux Thread model: posix gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC) COLLECT_GCC_OPTIONS='-H' '-v' '-fsyntax-only' '-mtune=generic' '-march=x86-64' /usr/libexec/gcc/x86_64-redhat-linux/4.5.1/cc1 -quiet -v -H /CRF_Verify/stdlib_test.c -quiet -dumpbase stdlib_test.c -mtune=generic -march=x86-64 -auxbase stdlib_test -version -fsyntax-only -o /dev/null GNU C (GCC) version 4.5.1 20100924 (Red Hat 4.5.1-4) (x86_64-redhat-linux) compiled by GNU C version 4.5.1 20100924 (Red Hat 4.5.1-4), GMP version 4.3.1, MPFR version 2.4.2, MPC version 0.8.1 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.5.1/include-fixed" ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.5.1/../../../../x86_64-redhat-linux/include" #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/lib/gcc/x86_64-redhat-linux/4.5.1/include /usr/include End of search list. GNU C (GCC) version 4.5.1 20100924 (Red Hat 4.5.1-4) (x86_64-redhat-linux) compiled by GNU C version 4.5.1 20100924 (Red Hat 4.5.1-4), GMP version 4.3.1, MPFR version 2.4.2, MPC version 0.8.1 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: ea394b69293dd698607206e8e43d607e . /usr/include/stdio.h .. /usr/include/features.h ... /usr/include/sys/cdefs.h .... /usr/include/bits/wordsize.h ... /usr/include/gnu/stubs.h .... /usr/include/bits/wordsize.h .... /usr/include/gnu/stubs-64.h .. /usr/lib/gcc/x86_64-redhat-linux/4.5.1/include/stddef.h .. /usr/include/bits/types.h ... /usr/include/bits/wordsize.h ... /usr/include/bits/typesizes.h .. /usr/include/libio.h ... /usr/include/_G_config.h .... /usr/lib/gcc/x86_64-redhat-linux/4.5.1/include/stddef.h .... /usr/include/wchar.h ... /usr/lib/gcc/x86_64-redhat-linux/4.5.1/include/stdarg.h .. /usr/include/bits/stdio_lim.h .. /usr/include/bits/sys_errlist.h . /usr/include/stdlib.h .. /usr/lib/gcc/x86_64-redhat-linux/4.5.1/include/stddef.h .. /usr/include/bits/waitflags.h .. /usr/include/bits/waitstatus.h ... /usr/include/endian.h .... /usr/include/bits/endian.h .... /usr/include/bits/byteswap.h ..... /usr/include/bits/wordsize.h .. /usr/include/sys/types.h ... /usr/include/time.h ... /usr/lib/gcc/x86_64-redhat-linux/4.5.1/include/stddef.h ... /usr/include/sys/select.h .... /usr/include/bits/select.h ..... /usr/include/bits/wordsize.h .... /usr/include/bits/sigset.h .... /usr/include/time.h .... /usr/include/bits/time.h ... /usr/include/sys/sysmacros.h ... /usr/include/bits/pthreadtypes.h .... /usr/include/bits/wordsize.h .. /usr/include/alloca.h ... /usr/lib/gcc/x86_64-redhat-linux/4.5.1/include/stddef.h . /usr/include/linux/time.h .. /usr/include/linux/types.h ... /usr/include/asm/types.h .... /usr/include/asm-generic/types.h ..... /usr/include/asm-generic/int-ll64.h ...... /usr/include/asm/bitsperlong.h ....... /usr/include/asm-generic/bitsperlong.h ... /usr/include/linux/posix_types.h .... /usr/include/linux/stddef.h .... /usr/include/asm/posix_types.h ..... /usr/include/asm/posix_types_64.h In file included from /CRF_Verify/stdlib_test.c:3:0: /usr/include/linux/time.h:9:8: error: redefinition of ‘struct timespec’ /usr/include/time.h:120:8: note: originally defined here /usr/include/linux/time.h:15:8: error: redefinition of ‘struct timeval’ /usr/include/bits/time.h:75:8: note: originally defined here Multiple include guards may be useful for: /usr/include/asm/posix_types.h /usr/include/bits/byteswap.h /usr/include/bits/endian.h /usr/include/bits/select.h /usr/include/bits/sigset.h /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h /usr/include/bits/time.h /usr/include/bits/typesizes.h