一、头文件
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。
分享到:
相关推荐
以下是arm-linux-gcc编译选项的详细知识点说明: 1. 编译过程的四个阶段: - 预处理阶段:GCC会对源文件进行预处理,展开宏定义、处理条件编译指令、包含头文件等。 - 编译阶段:经过预处理的源文件会被转化为...
### GCC的默认头文件路径和库文件 #### 概述 GCC(GNU Compiler Collection)是GNU项目的一部分,它提供了一套强大的工具链,用于多种编程语言的编译工作,其中包括C、C++、Objective-C等。本文将详细介绍Linux...
Linux 下的 gcc 编译中,头文件和库文件的搜索路径是编译器在编译过程中查找头文件和库文件的路径。编译器会在指定的目录中查找头文件和库文件,如果没有找到,就会报错。为了解决这个问题,需要了解 gcc 编译器的...
ARM-Linux-GCC 5.4.0 是一个专门用于在ARM架构的Linux系统上进行编译的交叉编译工具链。它允许开发者在非ARM平台(如x86架构的个人电脑)上构建适用于ARM处理器的应用程序和库。这个版本的交叉编译器对于那些需要...
由于我们是在主机上编译,可能需要获取目标平台的库文件(如`.a`静态库或`.so`动态库),并确保链接时使用正确的版本。此外,`arm-linux-gcc`可能会依赖一些交叉编译所需的库和头文件,这些需要根据具体需求安装。 ...
这个文件名可能是指一个包含MIPS 32位架构相关资源的压缩包,比如头文件、库文件或编译器本身。解压后,用户可以利用这些资源来构建他们的MIPS交叉编译环境,特别是对于32位MIPS架构的大端模式应用。 总结来说,...
1. **配置编译器**:首先,需要正确配置GCC,指定目标架构为ARM,以及相应的系统头文件和库路径。 2. **源码准备**:开发者需要编写或者获取针对ARM架构的源代码。 3. **编译**:使用配置好的交叉编译器对源代码进行...
1. `openssl-1.1.1g.tar.gz`:这是一个包含OpenSSL源代码的归档文件,通常用于下载、解压、配置、编译和安装OpenSSL库到目标系统。用户可以使用这个文件来定制OpenSSL的功能,或者针对特定平台进行编译。 2. `aarch...
在压缩包文件"opt"中,通常包含了整个交叉编译工具链的安装目录,包括bin目录下的可执行文件(如`arm-linux-gcc`)、lib目录下的库文件以及include目录下的头文件。解压后,根据上述步骤配置好环境,即可开始进行...
5. **调试与优化**:交叉编译时可能会遇到兼容性问题,如库版本不匹配、头文件缺失等。调试通常需要仔细阅读错误信息并调整配置。优化可以通过调整编译器选项实现,如-O2或-O3以提升代码性能。 6. **库和依赖**:...
在Linux环境下,交叉编译工具链包括编译器(gcc)、链接器(ld)、汇编器(as)以及其他辅助工具,它们协同工作以生成能够在目标ARM设备上运行的二进制文件。使用这样的工具链,开发者可以在强大的开发机上编译代码...
压缩包中的"mipsel32"可能包含了MIPS小端模式的32位交叉编译工具链的完整组件,如库、头文件和可执行程序,可供开发者在本地环境中设置并使用。安装和使用这些工具通常涉及解压、配置路径和可能的系统调整。通过熟练...
在使用`arm-linux-gcc`进行交叉编译时,需要确保配置文件和库路径正确设置,以便找到相应的头文件和库。同时,开发者还需要对目标平台的硬件特性有所了解,如内存大小、处理器类型等,以便进行优化。 总结来说,`...
6. **链接库和头文件**:交叉编译时可能需要特定于ARM的库和头文件。这些通常包含在交叉编译器的安装包中,位于`arm-linux-gcc`目录下的相应子目录。 7. **调试和优化**:交叉编译的程序在目标平台上可能遇到问题,...
2. **lib**:这个目录存放了库文件,它们是编译过程中所需的动态和静态链接库,用于构建和运行MIPSel-Linux上的程序。 3. **share**:通常包含共享资源,如配置文件、文档、locale数据等。 4. **mipsel-linux**:...
对于老版本的Linux内核和库,使用此版本编译可能会更稳定。 2. **arm-linux-gcc-4.3.2**:GCC 4.3.x系列是在2008年发布,引入了更多的C++03特性,增强了对C++模板的支持,同时也改进了对C99的实现。此外,这一版本...
在使用`arm-linux-gcc-4.9.2`时,我们需要配置好Cygwin环境,确保所有依赖项已安装,包括必要的库文件、开发头文件等。同时,还需要设置好环境变量,例如`PATH`,以便编译器能找到相应的工具和库。`使用说明.txt`...
2. **库文件**:包括标准C库、C++库和其他必要的库,这些库在编译过程中会被链接到目标程序中。 3. **头文件**:包含了MIPS架构相关的系统头文件,这些文件在编写源代码时被#include引用,提供了对系统功能的访问...
使用arm-linux-gcc编译你的C/C++源代码时,只需像普通GCC那样指定编译选项。例如: ``` arm-none-eabi-gcc -Wall -Os -o my_program my_program.c ``` 7. **注意事项**: - 在进行交叉编译时,确保所有库和...