搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
IT小白
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
入门级mybatis-plus-generator代码自动生成器,提高开发效率。值得收藏
2
flex布局文字可以换行数字不换行可以设置这个属性_flex个数过多实现不换行下拉展示
3
鸿蒙开发有必要学吗?看完这篇再决定吧
4
Gradle、Maven使用阿里镜像源_gradle镜像源
5
解锁三星bl锁有几种方法_如何判断三星手机bootloader是否解锁_免费解锁BL的3个方法...
6
leetcode-单调栈/单调队列_leetcode 单调队列
7
数组相关2--小和问题的详解_c++小和问题
8
深度学习(一)_第一个深度学习网络
9
公众号接入大模型实操
10
gpt4free带来了更好的chatgpt体验!
当前位置:
article
> 正文
linux下C/C++编译时系统搜索 include 和 链接库 文件路径的指定_g++ link 找不到符号文件 linux 自定义静态库
作者:IT小白 | 2024-03-14 11:11:28
赞
踩
g++ link 找不到符号文件 linux 自定义静态库
C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。自己指定的路径就不说了,这里说明一下系统自动搜索的路径。
【1】include头文件路径
除了默认的/usr/include, /usr/local/include等include路径外,还可以通过设置环境变量来添加系统include的路径:
# C
export C_INCLUDE_PATH=XXXX:$C_INCLUDE_PATH
# CPP
export CPLUS_INCLUDE_PATH=XXX:$CPLUS_INCLUDE_PATH
以上修改可以直接命令行输入(一次性),可以在/etc/profile中完成(对所有用户生效),也可以在用户home目录下的.bashrc或.bash_profile中添加(针对某个用户生效),修改完后重新登录即生效。
【2】link链接库文件路径
链接库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的(也可以在编译命令中通过 -l -L 来指定,这里讲的是使用系统默认搜索路径)。
一般 Linux 系统把 /lib /usr/lib /usr/local/lib 作为默认的库搜索路径,所以使用这几个目录中的链接库文件可直接被搜索到(不需要专门指定链接库路径)。对于默认搜索路径之外的库,则需要将其所在路径添加到gcc/g++的搜索路径之中。
链接库文件的搜索路径指定有两种方式:1)修改/etc/so.ld.conf 2)修改环境变量,在其中添加自己的路径
1)在环境变量中添加
动态链接库搜索路径:
export LD_LIBRARY_PATH=XXX:$LD_LIBRARY_PATH
静态链接库搜索路径:
export LIBRARY_PATH=XXX:$LIBRARY_PATH
以上修改可以直接命令行输入(一次性
)
,可以
在/etc/profile中完成(对所有用户生效
),也可以在
用户home目录
下的.
bashrc或.bash_profile
中添加(针对某个用户生效
),修改完后重新登录即生效。
2)在/etc/ld.so.conf 中添加指定的链接库搜索路径(需要root权限),然后运行 /sbin/ldconfig,以达到刷新 /etc/ld.so.cache的效果。
以上两种方式均可以达到指定链接库搜索路径的效果。
第二种搜索路径的设置方式对于程序连接时的库(包括共享库和静态库) 的定位已经足够了,但是对于使用了共享库的程序的执行还是不够的。这是因为为了加快程序执行时对共享库的定位速度,避免使用搜索路径查找共享库的低效率,系统会直接读取 /etc/ld.so.cache 并从中进行搜索的。/etc/ld.so.cache 是一个非文本的数据文件,不能直接编辑,它是根据 /etc/ld.so.conf 中设置的搜索路径由 /sbin/ldconfig 命令将这些搜索路径下的共享库文件集中在一起而生成的(ldconfig 命令要以 root 权限执行)。因此,为了保证程序执行时对库的定位,在 /etc/ld.so.conf 中进行了库搜索路径的设置之后,还要运行 /sbin/ldconfig 命令,更新 /etc/ld.so.cache 文件。
ldconfig的作用就是将/etc/ld.so.conf 指定的路径下的库文件缓存到/etc/ld.so.cache 。因此当安装完一些库文件(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下/sbin/ldconfig 使所有的库文件都被缓存到ld.so.cache中,不然修改的内容就等于没有生效。
在程序连接时,对于库文件(静态库和共享库)的搜索路径,除了上面的设置方式之外,还可以通过 -L 和 -l 参数显式指定。因为用 -L 设置的路径将被优先搜索,所以在连接的时候通常都会以这种方式直接指定要连接的库的路径。
注意:
1)在配置环境变量的时候,
等号前面不要加空格,否则可能出现 command not found
2)修改/etc/ld.so.conf后,当系统重新启动后,所有基于 GTK2 的程序在运行时都将使用新安装的 GTK+ 库。由于 GTK+ 版本的改变,有时会给应用程序带来兼容性的问题,造成某些程序运行不正常。为了避免出现这些情况,在 GTK+ 及其依赖库的安装过程中对于库的搜索路径的设置将采用环境变量的方式
export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH
2014.03.18
allenlinrui
本文内容由网友自发贡献,转载请注明出处:
【wpsshop博客】
推荐阅读
article
Linux
Ubuntu与
Putty
、
Xshell
连接超时network error:connect...
1、检查是否安装ssh服务ps -e | grep ssh有以上两个即可,安装ssh服务时,切换到root用户,代码如下...
赞
踩
article
Linux
-使用
mobaxterm
连接
虚拟机
ubuntu
...
16.0.0:18.4:链接:https://pan.baidu.com/s/1dNsahe9wO5KrWlWXtNqT...
赞
踩
article
Linux
——进程
间通信
...
一篇文章让你了解进程
间通信
,包括匿名或命名管道共享内存,从这篇文章中也可以慢慢体会多执行流的场景
Linux
——进程
间通信
...
赞
踩
article
LVS
(
Linux
Virtual
server
)集群介绍...
Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统服务等级协议(简称:SLA,全称:servic...
赞
踩
article
Linux
: 网络:
ipsec
&
ipv6
&
mtu
问题一例...
总体来说还是IPv6层的MTU的限制,导致ESP层的代码逻辑更高。所以根据这个最小值的设置,我们就需要给出一个说明,在使...
赞
踩
article
linux
将
api
_
key
设置
环境变量
里...
在最后添加
api
_
key
的
环境变量
。使用python 读取
环境变量
。
linux
将
api
_
key
设置
环境变量
里 ...
赞
踩
article
linux
最新
内核
4.19
,
Linux
Kernel
4.19
发布,初步支持Wi-Fi 6, 新ER...
原标题:
Linux
Kernel
4.19
发布,初步支持Wi-Fi 6, 新EROFS
文件系统
著名的
内核
维护者Greg...
赞
踩
article
基于
Docker
搭建
Maven
私服
仓库
(
Linux
)详细教程...
查看Nexus3镜像是否下载成功。创建Nexus3的挂载文件夹。
基于
Docker
搭建
Maven
私服
仓库
(
Linux
)详细...
赞
踩
article
linux
最新
内核
4.19
,
Linux
Kernel
4.19
首个维护版本更新发布 主要新特性介绍...
知名
内核
维护成员Greg Kroah-Hartman近期宣布回归,重新负责多个长期支持版
Linux
内核
的维护工作。...
赞
踩
article
linux
最新
内核
4.19
,
Linux
Kernel
4.19
内核
为长期
支持
版本,有诸多新功能及改进...
Linux
Kernel
开发者与维护总负责人Greg Kroah-Hartman宣布
Linux
Kernel
4.19
内...
赞
踩
article
Linux
kernel
-
4.19
内核
线程开启以及
延时
_
kernel
4.19
...
Linux
kernel
-
4.19
内核
线程开启以及
延时
_
kernel
4.19
kernel
4.19
...
赞
踩
article
Linux
4.19
内核中
spinlock
概览...
Linux
4.19
内核
spinlock
相关文件梳理_
spinlock
spinlock
...
赞
踩
article
arm
linux
添加系统调用
_
syscall
(
_
_
nr
_
finit
_
module
...
在
arm
linux
中添加系统调用
_
syscall
(
_
_
nr
_
finit
_
module
syscall
(
_
_
nr
_
fini...
赞
踩
article
【
linux
kernel
】
linux
内核中的
系统
调用
分析_
syscall
_
define1
...
linux
内核中的
系统
调用
文章目录
linux
内核中的
系统
调用
一、简介二、【SYSCALL_DEFINE0】定义无参数的系...
赞
踩
article
系统调用
SYSCALL
_
DEFINE
详解(Linux-4.x)
_
syscall
_
define4
...
SYSCALL
_
DEFINE
定义 #define
SYSCALL
_
DEFINE
0(sname) \ SYSCA...
赞
踩
article
python3
安装
libxml2
_
failed
to
find
headers
for libx...
command:pip install
libxml2
-
python3
errors:Collecting
libxml2
...
赞
踩
article
从零开始
的嵌入式系统开发学习
Day3
(
linux
C)_
gets
(
buf
)...
一、输入输出函数1.1 getchar()/putchar()1.1.1 getchar()头文件:#include <...
赞
踩
article
HarmonyOS4.0系列——05、
状态
管理之@
Prop
、@
Link
、@
Provide
、@Cons...
看下面这张图Components部分的装饰器为组件级别的
状态
管理,部分为应用的
状态
管理。开发者可以通过@StorageL...
赞
踩
article
【
Linux
】
文件
描述符
与
重定向
操作_将存放用户信息
文件
中
的
后5行通过
重定向
符号 导入到
file02
...
深入了解
文件
描述符
的
意义,学习
文件
重定向
的
底层原理以及系统调用✨✨_将存放用户信息
文件
中
的
后5行通过
重定向
符号 导入到f...
赞
踩
article
【
Linux
】第一个
小
程序
--
进度条
...
这篇博客要综合利用以前的知识,来实现一个
进度条
程序
~【
Linux
】第一个
小
程序
--
进度条
这篇...
赞
踩
相关标签
linux
ubuntu
MobaXterm
openssh-service
openssh-client
lvs
运维
网络
mtu
ipsec
服务器
linux最新内核4.19
docker
maven
nexus
c++
spinlock
qspinlock