再论gcc开发环境变量设置步骤

本文介绍了在GCC开发中设置头文件和库文件路径的方法,包括通过命令行参数-I和-L指定路径,以及编辑/etc/ld.so.conf文件来添加库搜索路径。同时,讨论了LIBRARY_PATH和LD_LIBRARY_PATH环境变量在静态库链接和动态链接时的作用和区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发中我们经常遇到自己编写或依赖第三方库文件和头文件的情况,一般处理方法如下

方法一、直接在gcc命令中通过-I指定头文件目录,-L指定库文件目录。

[root@localhost code]# gcc -Wall version1.c -o version1 -I /usr/include/mysql/ -L /usr/lib/mysql/ -lmysqlclient

方法二、通过设置环境变量更改,但重启失效。

#增加.so动态库搜索路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wm/develop/mongodb/lib

#增加.a静态库搜索路径
export LIBRARY_PATH=$LIBRARY_PATH:/home/wm/develop/mongodb/lib

#增加bin搜索路径
export PATH=$PATH:/home/wm/develop/mongodb/bin

#增加GCC的include文件搜索路径
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/include/libmonogoc-1.0/

#增加G++的include文件搜索路径
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/libmonogoc-1.0/

方法三、直接修改/etc/profile,添加环境变量。对所有用户有效修改/etc/profile,对个人有效则修改~/.bashrc

export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/include/libmongoc-1.0/:/usr/include/bson/:/usr/include/mysql

export LIBRARY_PATH=$LIBRARY_PATH:/usr/lib/mysql

方法四、在/etc/ld.so.conf 文件中添加库的搜索路径(需要root权限)。将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择添加方法也极其简单,将库文件的绝对路径直接写进去就OK了,一行一个。每次编辑完该文件后,都必须运行命令ldconfig使修改后的配置生效。注意/etc/ld.so.cache。


  • 静态库链接时搜索路径顺序:

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环境变量的区别

LIBRARY_PATH:   gcc build time environment parm. 就是gcc编译期的环境变量,指定库路径.
LD_LIBRARY_PATH: gcc runtime environment parm. gcc运行期的环境变量,.....


LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下:

LIBRARY_PATH环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径,例如,指定gcc编译需要用到的动态链接库的目录。设置方法如下(其中,LIBDIR1和LIBDIR2为两个库目录):


export LIBRARY_PATH=LIBDIR1:LIBDIR2:$LIBRARY_PATH

LD_LIBRARY_PATH环境变量用于在程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径,注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。设置方法如下(其中,LIBDIR1和LIBDIR2为两个库目录):


export LD_LIBRARY_PATH=LIBDIR1:LIBDIR2:$LD_LIBRARY_PATH

举个例子,我们开发一个程序,经常会需要使用某个或某些动态链接库,为了保证程序的可移植性,可以先将这些编译好的动态链接库放在自己指定的目录下,然后按照上述方式将这些目录加入到LD_LIBRARY_PATH环境变量中,这样自己的程序就可以动态链接后加载库文件运行了。
区别与使用:

开发时,设置LIBRARY_PATH,以便gcc能够找到编译时需要的动态链接库。
发布时,设置LD_LIBRARY_PATH,以便程序加载运行时能够自动找到需要的动态链接库。
  • gcc的搜索路径实例

[root@localhost code]# gcc --print-search-dir
install: /usr/lib/gcc/i686-redhat-linux/4.4.7/
programs: =/usr/libexec/gcc/i686-redhat-linux/4.4.7/:/usr/libexec/gcc/i686-redhat-linux/4.4.7/:/usr/libexec/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.7/:/usr/lib/gcc/i686-redhat-linux/:/usr/libexec/gcc/i686-redhat-linux/4.4.7/:/usr/libexec/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.7/:/usr/lib/gcc/i686-redhat-linux/:/usr/lib/gcc/i686-redhat-linux/4.4.7/../../../../i686-redhat-linux/bin/i686-redhat-linux/4.4.7/:/usr/lib/gcc/i686-redhat-linux/4.4.7/../../../../i686-redhat-linux/bin/
libraries: =./i686-redhat-linux/4.4.7/:./:/usr/lib/mysql/i686-redhat-linux/4.4.7/:/usr/lib/mysql/:/usr/lib/gcc/i686-redhat-linux/4.4.7/:/usr/lib/gcc/i686-redhat-linux/4.4.7/:/usr/lib/gcc/i686-redhat-linux/4.4.7/../../../../i686-redhat-linux/lib/i686-redhat-linux/4.4.7/:/usr/lib/gcc/i686-redhat-linux/4.4.7/../../../../i686-redhat-linux/lib/:/usr/lib/gcc/i686-redhat-linux/4.4.7/../../../i686-redhat-linux/4.4.7/:/usr/lib/gcc/i686-redhat-linux/4.4.7/../../../:/lib/i686-redhat-linux/4.4.7/:/lib/:/usr/lib/i686-redhat-linux/4.4.7/:/usr/lib/
[root@localhost code]# 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值