linux gcc 编译时头文件和库文件搜索路径

一、头文件

  

gcc 在编译时寻找所需要的头文件 :

  

※搜寻会从-I开始

  

※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH

  

※再找内定目录

 

/usr/include  

/usr/local/include

 

/usr/lib/gcc-lib/i386-linux/2.95.2/include

 

/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3

 

/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include

  

库文件但是如果装gcc的时候,是有给定的prefix的话,那么就是

 

/usr/include  

prefix/include

 

prefix/xxx-xxx-xxx-gnulibc/include

 

prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include

 

  

 

二、库文件

 

编译的时候:

 

※gcc会去找-L

 

※再找gcc的环境变量LIBRARY_PATH

  

※再找内定目录 /lib:/usr/lib: /usr/local/lib:这是当初compile gcc时写在程序内的

 

 

三、运行时动态库的搜索路径

1、在配置文件/etc/ld.so.conf中指定动态库搜索路径

2、通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔)

  

3、在编译目标代码时指定该程序的动态库搜索路径(还可以在编译目标代码时指定程序的动态库搜索路径。

  

这是通过gcc 的参数"-Wl,-rpath,"指定。当指定多个动态库搜索路径时,路径之间用冒号":"分隔

 

4、默认的动态库搜索路径/lib    /usr/lib

 

可以通过执行可执行文件pos得到的结果不同获知其搜索到了哪个动态库,从而获得第1个动态库搜索顺序,然后删除该动态库,

  

再执行程序pos,获得第2个动态库搜索路径,再删除第2个被搜索到的动态库,

  

如此往复,将可得到Linux搜索动态库的先后顺序。

 

程序pos执行的输出结果和搜索到的动态库的对应关系如表1所示

  

程序pos输出结果 使用的动态库 对应的动态库搜索路径指定方式

 

 

./ ./libpos.so 编译目标代码时指定的动态库搜索路径

  

/root/test/env/lib /root/test/env/lib/libpos.so 环境变量LD_LIBRARY_PATH指定的动态库搜索路径

  

/root/test/conf/lib /root/test/conf/lib/libpos.so 配置文件/etc/ld.so.conf中指定的动态库搜索路径

  

/lib /lib/libpos.so 默认的动态库搜索路径/lib

  

/usr/lib /usr/lib/libpos.so 默认的动态库搜索路径/usr/lib

  

动态库的搜索路径搜索的先后顺序是:

  

1.编译目标代码时指定的动态库搜索路径;

 

2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;  

3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib    /usr/lib。

时间: 2024-09-16 20:03:00

linux gcc 编译时头文件和库文件搜索路径的相关文章

嵌入式 Linux下编译并使用curl静态库

 #x86 ./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disable-tftp --disable-telnet --disable-largefile --disable-smtp --disable-imap --without-ssl --without-libssh2 --without-zlib --without-librtmp --withou

头文件和库文件

简单的说:头文件提供声明,库文件提供定义/实现.C 代码的编译过程: 预处理(需要头文件) -> 编译 -> 汇编 -> 链接(需要库文件); 执行时可能还有动态链接过程. 在早期的编程语言中Basic Fortan没有头文件的概念,c++/c语言的初学者虽然会使用头文件,但是常常不明其理.   1.通过头文件来调用库功能. 在很多场合,源代码不便(或不准)向用户公布, 只要向用户提供头文件和二进制的库即可,用户只需要按照头文件中的接口声明来调用库函数, 而不必关心接口是怎么实现的,编译

图像处理问题:在跑有关图像处理的代码时在linux下编译时出现错误如下

问题描述 图像处理问题:在跑有关图像处理的代码时在linux下编译时出现错误如下 应该怎样修改? 解决方案 源代码有问题,如果不是源代码的问题就是缺少头和库,或者头和库的路径没有被添加到编译器的路径中.先看下出错的源代码文件的出错行,找到对应函数所用的头和库. 解决方案二: 你是不是调用了别的库?我看应该是你代码中用了别的库,但是没有用对.

android app启动时找不到库文件

问题描述 android app启动时找不到库文件 打印日志. 实际app安包是有这个库文件. 请大神给我一个问题的思路. 谢谢!!!!! 解决方案 关于cmd使用javah生成.h时出现:无法访问android.app.Activity 找不到android.app.activity的类文件javah编译class文件找不到android.app.Activity的类文件在Windows下的javah编译class文件找不到android.app.Activity的类文件 解决方案二: 你把s

指针-求大神解答一下linux内核编译时键盘驱动模块出现了问题!新手求助!谢谢!

问题描述 求大神解答一下linux内核编译时键盘驱动模块出现了问题!新手求助!谢谢! 编译的时候,就出现了这几个错误,然后我就一直不能编译内核, 估计是指针的问题,但是我又不知道应该如何解决, 已经卡了我差不多两个星期了,一直都解决不了,跪求大神指点! 谢谢! 解决方案 在编译之前,有没有用#cp -f config_tq板的具体的名字 .config复制tq板的配置文件?

小白求助-qtcreator编译时显示“无法打开包括文件vcruntime.h”

问题描述 qtcreator编译时显示"无法打开包括文件vcruntime.h" qt2.8.0配vs2008 编译的时候就给我显示了"无法打开包括文件vcruntime.h" 我在提示的路径文件夹里确实没有找到这个文件 查百度也不知道哪里能下载这个文件 求大神帮忙解决这个问题 解决方案 编译时提示 无法打开包括文件:"fstream.h"编译时提示 无法打开包括文件:"fstream.h"编译时提示 无法打开包括文件:&qu

自己在linux上编译、链接、动态库和静态库的学习笔记

在平常的项目中,我们都是使用公司要求的makefile.makedebug一类的文件,因此,在编译.链接.生成和链接动态库与静态库的时候,我们只是简单的使用一些已经设置的变量,只是简单的修改.添加一些文件名,或许这次我们编译通过了,但是,在某一个时候,可能出现了一个问题,无论简单与否,因为平常没有留意,导致的结果可能是花了好长时间才能解决.而如果平常只是简单的留一下心,或许这些问题都是可以避免的. 因此,今天我自己使用几个文件,编译动态库.静态库以及动态库和静态库的嵌套调用等问题,尽量还原我在项

【原创】源码编译libevent-2.0.21-stable生成库文件说明

按照 README 中的说明,首先执行 configure下面的输出信息是针对源码编译所在机器进行的检测 [root@Paxos libevent-2.0.21-stable]# ./configure checking for a BSD-compatible install... /usr/bin/install -c ... configure: creating ./config.status config.status: creating libevent.pc config.stat

GNU/Linux中动态库的搜索路径的指定方法汇总

动态链接时.执行时搜索路径顺序: 1.编译目标代码时使用-L指定的动态库搜索路径: 2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径: 3.配置文件/etc/ld.so.conf中指定的动态库搜索路径: 4.默认的动态库搜索路径/lib: 5.默认的动态库搜索路径/usr/lib. 以上的3-5步中,不再需要手动地指定动态库搜索路径了, 有一个可以进行配置更新默认的搜索路径的命令: ldconfig ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及