gcc是如何找到头文件、库文件的

 
gcc等编译器如何找到头文件、库文件的

写了一个hello world程序
// hello.cpp
#include <iostream>
using namespace std;
int main()
{
cout<<"hello world./n";
return 0;
}
然后敲入指令g++ hello.cpp
我并没有指定iostream头文件及其库文件在哪,g++是怎么找到这些文件的呢?

如果没有在编译参数中指定,编译器会去默认的地方去找。
如/usr/include,/lib等!

 

这里默认的地方是不是就是环境变量中的
CFLAGS
LD_LIBRARY_PATH
这两个变量来找头文件和库文件吗,可是我把CFLAGS设置为空,再g++ hello.cpp,还是能够编译成功。
是不是以上变量是用来添加额外的。

/usr/include /lib /usr/lib 这些路径不用参数,也不用环境变量,gcc 自动找,也许是在 spec 里的。

 

如果你的Makefile里面没有指定搜索路径,那么make就在当前目录和文件夹下查找文件。所以Make没有找到代码包含的库文件。
有两种方法指定搜索路径:
1. 使用特殊变量"VPATH"。如果定义了这个变量,那么,make就会在当当前目录找不到的情况下,到所指定的目录中去找寻文件了。
   使用方法是
   VPATH=src:mydoc
    Make就会搜索上面的两个文件夹。不同的文件夹用:隔开。
2. 用vpath语句。
  vpath %.c src:mydoc
    表示在这两个文件夹中搜索.c的文件。


是在specs里面读取的路径信息。
命令行中键入 gcc -v
Reading specs from /usr/lib/gcc/i686-pc-cygwin/3.4.4/specs
Configured with: /usr/build/package/orig/test.respin/gcc-3.4.4-3/configure --ver
bose --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib --libe
xecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-langu
ages=c,ada,c++,d,f77,pascal,java,objc --enable-nls --without-included-gettext --
enable-version-specific-runtime-libs --without-x --enable-libgcj --disable-java-
awt --with-system-zlib --enable-interpreter --disable-libgcj-debug --enable-thre
ads=posix --enable-java-gc=boehm --disable-win32-registry --enable-sjlj-exceptio
ns --enable-hash-synchronization --enable-libstdcxx-debug
Thread model: posix
gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)


注意“--prefix=/usr” 以及“--libdir=/usr/lib ”
表示gcc ld as 等可执行文件安装在/usr/bin,而libc.a 等文件是在/usr/lib中。
解压缩交叉编译器时,也是要解压缩在在--prefix 指定的目录下。
比如 下载了arm-linux 的交叉编译器cross-3.3.2.tar.bz2,解压缩之后,运行 arm-linux-gcc -v
得到 --prefix=/usr/local/arm。那么就要把 bin lib 等所有的文件和文件夹copy到/usr/local/arm目录下。
否则到时候运行arm-linux-gcc hello.c会提示找不到stdio.h 或者 lib.so.6 等

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值