推广 热搜: page  小红  红书  数据  论文  考试  数据分析  关键词  哪些  搜索 

Linux下编译C/C++项目指定头文件和链接库搜索路径

   日期:2024-12-26     移动:https://sicmodule.kub2b.com/mobile/quote/13651.html

方式1:#include <...>

方式2:#include "..."

<说明> #include <...> 和 #include "..." 的区别

1. 前者一般会优先搜索 -I 选项后的头文件路径(即用gcc编译时的-I选项,之后就是标准的系统头文件路径。

2. 后者是从当前的目录来搜索

方式3:在gcc命令或者Makefile文件中,使用 -I 来设置头文件的路径

方式4:设置环境变量。

1. 在当前用户目录下,设置环境变量,只针对当前用户有效。vim .bash_profile 或者 .bashrc

export C_INCLUDE_PATH=$C_INCLUDE_PATH:头文件路径    #C语言

export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:头文件路径     #C++

2. 设置全局环境变量,对所有用户生效,需要root权限。vim /etc/profile

<注意> 如果当前用户设置了同样的环境变量,那么将屏蔽掉相同名称的全局环境变量的作用域。

Linux系统标准头文件路径

/usr/include

/usr/local/include

可以使用 cpp -v 命令来查看标准系统头文件的路径。

当然,除了默认的/usr/include, /usr/local/include等include路径外,还可以通过设置环境变量来添加系统include的路径,就是设置上面的 C_INCLUDE_PATH CPLUS_INCLUDE_PATH 环境变量来添加标准系统头文件路径。

  • 系统默认的链接库路径有

/lib

/usr/lib

/usr/local/lib

对于64位的库,则是以lib64开头的。

设置链接库文件的搜索路径

1、在环境变量中添加。全局设置:/etc/profile。当前用户设置:.bash_profile 或者 .bashrc。

动态链接库搜索路径

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库文件路径

静态链接库搜索路径

export LIBRARY_PATH=$LIBRARY_PATH:库文件路径

<注意> 当通过上述环境变量指定多个动态库搜索路径时,路径之间用冒号 ":" 分隔。

以上修改可以直接在Linux命令行输入(一次性,也可以在/etc/profile中完成(对所有用户生效,也可以在~/.bash_profile或者~/.bashrc中添加(针对某个用户生效,修改完成后,使用source命令使修改立即生效,例如: source ~/.bash_profile。

2、在 /etc/ld.so.conf 中添加指定的链接库搜索路径(需要root权限,然后运行 /sbin/ldconfig 命令,以达到刷新 /etc/ld.so.cache 的效果。ldconfig 命令的作用就是将 /etc/ld.so.conf 指定的路径下的库文件缓存到 /etc/ld.so.cache 。因此当安装完一些库文件(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig 使所有的库文件都被缓存到ld.so.cache中,不然修改的内容就等于没有生效。

3、在编译程序的链接阶段,除了上面两种设置链接库的搜索路径方式之外,还可以通过 -L 和 -l 参数显式指定。因为用 -L 设置的路径将被优先搜索,所以在链接的时候通常都会以这种方式直接指定要链接的库的路径。

如果没有 -L 参数,只有 -l 参数,例如,-lssl、-lpthread等,即没有通过 -L 参数指定链接库的搜索路径,就会按照下面的搜索顺序去查找

  1. 通过环境变量LD_LIBRARY_PATH指定动态库搜索路径
  2. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
  3. 默认的动态库搜索路径/lib
  4. 默认的动态库搜索路径/usr/lib。

链接库文件的搜索路径顺序

1. 编译目标代码时指定的动态库搜索路径,即 -L 参数后面设置的搜索路径

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

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

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

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

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

现在很多新的开发包一般都使用 pkg-config 来生成链接参数,可以使用 pkg-config --list-all 命令可以列出所有支持的开发包。

pkg-config的用法:pkg -config <pkgName> --libs --cflags

pkgName:是三方库的包名。比如,pkg-config glib-2.0 --libs --cflags,使用gcc编译的时候需要使用(``)符号括起来。

例子,编译glib应用程序。

本文地址:https://sicmodule.kub2b.com/quote/13651.html     企库往 https://sicmodule.kub2b.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号