`
猫太的鱼
  • 浏览: 239249 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linux编译链接环境变量

阅读更多
静态库链接时搜索路径顺序:

1.ld会去找GCC命令中的参数-L

2.再找gcc的环境变量LIBRARY_PATH

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

动态链接时、执行时搜索路径顺序:

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

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

3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;

4.默认的动态库搜索路径/lib;

5.默认的动态库搜索路径/usr/lib。

有关环境变量:

LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径
链接过程
建立静态库方法(包括静态内部库和动态外部库)
gcc -c fun.c
ar cqs libfun.a fun.o
编译中使用静态库方法
gcc call.c -static -L. -lfun -o fun_static_call
建立动态库(包括动态内部库和动态外部库)
gcc fun.c -fPIC -shared -o libfun.so
编译中使用动态库方法
gcc call.c -L. -lfun -o fun_dyn_call
编译器会先在path文件夹下搜索libxxx.so文件,
如果没有找到,继续搜索libxxx.a(静态库)。


执行过程

无论是使用动态库还是外部库链接时都是使用的ld连接器;

使用动态库的程序执行时使用动态加载器。在Linux 下,加载器是/lib/ld-Linux.so.X(X是版本号)。然后加载器搜索、加载程序所要使用的动态链接库。搜索顺序见上。
分享到:
评论

相关推荐

    linux-oracle环境变量及自启动脚本

    在Linux系统中,Oracle数据库的运行依赖于一系列的环境变量设置和自启动脚本的配置。这些要素确保了数据库服务的稳定性和可管理性。本文将深入探讨与"linux-oracle环境变量及自启动脚本"相关的知识点。 一、Oracle...

    交叉编译设置环境变量

    除了`PATH`之外,还有其他一些重要的环境变量,例如`LD_LIBRARY_PATH`,它用于指示动态链接器查找共享库的路径。在交叉编译环境下,可能也需要根据目标系统的架构设置这个变量。总之,正确设置和管理环境变量对于...

    Linux编译环境

    Linux编译环境是开发者在Windows操作系统中构建针对Linux平台应用程序的一种解决方案。这通常涉及到使用交叉编译工具链,因为Windows系统本身无法直接处理Linux的ELF(Executable and Linkable Format)格式的目标...

    LINUX下多个c程序编译链接的程序

    本主题将深入探讨如何在Linux下有效地编译和链接多个C程序,并结合`makefile`来自动化这个过程。 首先,理解C程序的编译和链接是至关重要的。编译是将源代码(`.c`文件)转换为中间目标代码(`.o`文件)的过程,而...

    arm linux交叉编译环境的建立 傻瓜教程(超详细)

    - 修改 `.bashrc` 文件,添加交叉编译工具的路径到 `PATH` 环境变量中。 - 重启系统以使更改生效。 #### 三、测试交叉编译器 为了验证我们的交叉编译环境是否正确搭建,可以在任意目录下创建一个简单的 C 语言...

    CDT和JDT环境变量配置

    在开发Java和嵌入式应用程序时,CDT(C/C++ Development Tooling)和JDT(Java Development Tools)是Eclipse IDE...正确配置CDT和JDT的环境变量,能确保代码的顺利编译、链接和运行,提升开发效率,避免不必要的错误。

    linux编译与调试

    通过深入学习这些Linux编译与调试的知识,开发者能够更高效地在Linux环境下进行软件开发,快速定位和解决问题。实践中,还需要结合具体的项目和场景,灵活应用所学,不断提升自己的技术水平。希望这个课程的内容对...

    设置交叉工具链的环境变量

    设置交叉工具链的环境变量 在嵌入式系统开发中,交叉工具链(Cross-Compile Toolchain)扮演着非常重要的角色,它使得开发者可以在宿主机上编译和生成目标板的可执行代码。然而,为了使用交叉工具链,需要正确地...

    linux下java环境gdal编译好的文件

    对于动态链接库,可能需要设置`LD_LIBRARY_PATH`环境变量,以便系统能够找到它们。静态库则在编译时链接,不需要运行时的额外配置。 总的来说,这个压缩包提供了一套完整的GDAL环境,包括Java接口、坐标系统转换...

    Linux下编译ffmpeg的wasm库

    3. 设置环境变量:运行`source emsdk_env.sh`来配置必要的PATH和其它环境变量。 4. 获取FFmpeg源码:使用`git clone`从官方仓库克隆FFmpeg源码。 5. 配置编译选项:进入FFmpeg源码目录,使用`./configure`命令配置...

    java 环境变量的配置

    例如,在Linux或MacOS系统中,通常需要编辑`~/.bashrc`或`/etc/environment`文件来配置环境变量。 - 在某些情况下,可能还需要重启计算机才能使更改生效。 通过以上步骤,你可以成功地为你的计算机配置好Java环境...

    java环境变量设置

    理解并正确设置这些环境变量对于Java开发者来说至关重要,因为它们直接影响到Java程序的编译、运行和调试。 首先,我们关注的是三个主要的环境变量:`JAVA_HOME`, `PATH`, 和 `CLASSPATH`。 1. **JAVA_HOME**: ...

    嵌入式linux交叉编译

    本文将基于给定的文件信息,深入解析嵌入式Linux的交叉编译流程,涵盖工具链构建、环境变量设置、binutils安装及Bootstrap编译器gcc的设置。 ### 工具链构建:构建ARM/Linux交叉编译工具链 构建一个完整的ARM/...

    NDK eclipse环境变量设置

    在Windows、Linux或MacOS等不同的操作系统中设置环境变量的方法可能会有所不同,但概念上是相同的。 对于NDK eclipse环境变量的配置,主要涉及以下几个方面: 1. NDKROOT环境变量的设置:NDKROOT环境变量指向NDK...

    Linux编译运行

    2. 如果可执行文件所在的目录已经加入了PATH环境变量中,那么可以直接通过可执行文件名来运行程序: $ export PATH=$PATH:/home/test $ a.out Makefile是一种管理项目编译的工具文件,它通过编写一组规则来指定...

    195238arm-linux交叉编译环境的建立

    5. **配置编译环境变量**:在开始编译项目之前,你需要设置环境变量,如`CC`、`CXX`、`AR`、`LD`等,指向你的Toolchain中的相应工具。同时,`CFLAGS`和`LDFLAGS`也需要包含指向sysroot的路径。 6. **交叉编译项目**...

    mingw64编译器,解压配置环境变量即可用

    3. **bin目录**:包含编译器、链接器和其他工具,如ar、as、ld等,它们都是执行编译过程所必需的。 4. **include目录**:包含了头文件,这些头文件定义了编译器需要的各种函数和结构体。 5. **lib目录**:存储了编译...

    librtmp库实测可在Linux下进行交叉编译

    2. **配置环境变量**:设置`CC`、`CXX`、`AR`、`LD`等环境变量,指向交叉编译工具。 3. **修改Makefile**:调整Makefile,确保链接器和编译器指向正确的位置。 4. **编译librtmp源码**:执行`./configure --host=...

    linux设备交叉编译nfs服务器需要用到的库

    3. **配置编译环境**:设置环境变量,如`CC`、`CXX`、`AR`等,指向交叉编译工具链的路径。 4. **配置编译选项**:运行configure脚本时,指定目标架构和位置,例如`--host=arm-linux`。 5. **编译和安装**:使用`...

    Linux下使用Java调用Hikvision设备网络SDK的使用指南.pdf

    - readme.txt文件:包含了设置环境变量的指导,即设置LD_LIBRARY_PATH环境变量,以便在系统中加载动态库。 4. 设置LD_LIBRARY_PATH环境变量的方法: - 直接在终端输入export命令,临时修改环境变量。 - 修改用户...

Global site tag (gtag.js) - Google Analytics