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

头文件路径

方式1:#include <...>

方式2:#include "..."

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

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

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

#示例,会优先从/home/xiaowp/include路径去搜索#include <xxx.h>的头文件
gcc foo.c -I/home/xiaowp/include -o foo

方式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 命令来查看标准系统头文件的路径。

# cpp -v
Using built-in specs.
COLLECT_GCC=cpp
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
COLLECT_GCC_OPTIONS='-E' '-v' '-mtune=generic' '-march=x86-64'
 /usr/libexec/gcc/x86_64-redhat-linux/4.8.5/cc1 -E -quiet -v - -mtune=generic -march=x86-64
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../x86_64-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-redhat-linux/4.8.5/include
 /usr/local/include
 /usr/include
End of search list.

当然,除了默认的/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 设置的路径将被优先搜索,所以在链接的时候通常都会以这种方式直接指定要链接的库的路径。

#添加动态链接库搜索路径
gcc foo.c -L/home/xiaowp/lib -lfoo -o foo

#添加静态链接库搜索路径
gcc foo.c -L/home/xiaowp/lib -static -lfoo -o foo

如果没有 -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 来生成链接参数,可以使用 pkg-config --list-all 命令可以列出所有支持的开发包。

# 查看glib库的包名
$ pkg-config --list-all|grep glib*
glib-2.0  GLib - C Utility Library

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

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

例子,编译glib应用程序。

# 编译glib应用程序,方法1
gcc -o glist_test glist_test.c -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -L/usr/local/lib -lglib-2.0

# 方法2,使用 pkg-config 方式
gcc `pkg-config glib-2.0 --cflags --libs` glib_test.c -o glib_test

 

在 Jetson Nano 上使用 Qt Creator 进行 libargus 开发,需要将 libargus 的头文件和库文件添加到您的项目中,以下是具体步骤: 1. 打开 Qt Creator,创建一个新的项目。 2. 在项目的属性中,添加 libargus 的头文件和库文件。具体操作为:打开项目的属性,选择“Build & Run”,在“Build Steps”选项卡中,点击“Add Library”按钮,在弹出的对话框中选择“External Library”,并添加 libargus 的头文件和库文件路径。 - 头文件路径:在 Jetson Nano 上,libargus 的头文件通常位于 `/usr/include/` 目录下。在 Qt Creator 中,您需要将该路径添加到项目头文件搜索路径中。 - 库文件路径:在 Jetson Nano 上,libargus 的库文件通常位于 `/usr/lib/aarch64-linux-gnu/tegra/` 目录下。在 Qt Creator 中,您需要将该路径添加到项目的库文件搜索路径中。 3. 配置项目编译选项,以便能够链接 libargus 库。具体操作为:打开项目的属性,选择“Build & Run”,在“Build Settings”选项卡中,添加 libargus 库文件的链接选项。 - 在“Linker Flags”中,添加 `-largus` 选项,以链接 libargus 库文件。 4. 编写代码:在 Qt Creator 中,您可以编写 C++ 代码,调用 libargus 的接口实现图像和视频的采集。具体的接口调用方法可以参考 Nvidia 官方文档或者其他相关的教程。 5. 编译和运行:在 Qt Creator 中,您可以编译和运行您的程序,进行图像和视频的采集和处理。 这样,您就可以在 Jetson Nano 上使用 Qt Creator 进行 libargus 开发了。希望以上步骤能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值