免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9636 | 回复: 5
打印 上一主题 下一主题

gcc等编译器如何找到头文件、库文件的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-24 10:54 |只看该作者 |倒序浏览
写了一个hello world程序
// hello.cpp
#include <iostream>
using namespace std;
int main()
{
cout<<"hello world.\n";
return 0;
}

然后敲入指令g++ hello.cpp
我并没有指定iostream头文件及其库文件在哪,g++是怎么找到这些文件的呢?

论坛徽章:
0
2 [报告]
发表于 2006-08-24 11:32 |只看该作者
如果没有在编译参数中指定,编译器会去默认的地方去找。

如/usr/include,/lib等!

论坛徽章:
0
3 [报告]
发表于 2006-08-24 15:22 |只看该作者
这里默认的地方是不是就是环境变量中的
CFLAGS
LD_LIBRARY_PATH
这两个变量来找头文件和库文件吗,可是我把CFLAGS设置为空,再g++ hello.cpp,还是能够编译成功。
是不是以上变量是用来添加额外的。

论坛徽章:
0
4 [报告]
发表于 2006-08-24 19:23 |只看该作者
/usr/include /lib /usr/lib 这些路径不用参数,也不用环境变量,gcc 自动找,也许是在 spec 里的。

论坛徽章:
0
5 [报告]
发表于 2006-08-24 20:40 |只看该作者
如果你的Makefile里面没有指定搜索路径,那么make就在当前目录和文件夹下查找文件。所以Make没有找到代码包含的库文件。
有两种方法指定搜索路径:
1. 使用特殊变量"VPATH"。如果定义了这个变量,那么,make就会在当当前目录找不到的情况下,到所指定的目录中去找寻文件了。
   使用方法是
   VPATH=src:mydoc
    Make就会搜索上面的两个文件夹。不同的文件夹用:隔开。
2. 用vpath语句。
  vpath %.c src:mydoc
    表示在这两个文件夹中搜索.c的文件。

论坛徽章:
0
6 [报告]
发表于 2008-06-27 20:57 |只看该作者
是在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 等

这个简单的问题也让我吃了不少苦头。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP