GCC 编译链接库和头文件缺失

链接

Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。

ln

为某一个文件在另外一个位置建立一个不同的链接

当 我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的 目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
实际是在文件系统中创建了一个新的文件,该文件包含了指向原始文件的指针。
ln -s 源文件 目标文件

在使用 ln 命令时,可以通过选项 -s 或 --symbolic 创建一个符号链接,或者不使用该选项来创建一个硬链接。这两种链接的区别如下:

硬链接:硬链接是指将一个文件名链接到一个 inode 上,使得多个文件名指向同一个文件内容。创建硬链接时,目标
文件必须是同一个文件系统中的一个已经存在的文件。当删除原始文件时,硬链接不会受到影响,因为它们都指向同一个 inode,只有当所有链接都被删除时,文件的内容才会被真正删除。

符号链接:符号链接是指将一个文件名链接到另一个文件名上,实际上是在文件系统中创建了一个新的文件,该文件包含了指向原始文件的指针。符号链接可以跨越文件系统边界,并且可以指向任何类型的文件(包括目录)。当删除原始文件时,符号链接会失效,但并不会影响到链接指向的文件。

ldd

我们可以用 ldd 命令来确定某一特定可执行程序是否为静态链接的
首先ldd不是一个可执行程序,而只是一个shell脚本

ldd+程序位置 可以查看程序需要的库

动态装入器 ld.so.conf

动态装入器负责装入动态链接的可执行程序运行所需的共享库
动态装入器找到共享库要依靠两个文件 — /etc/ld.so.conf 和 /etc/ld.so.cache。
ld.so.conf 文件包含一个所有目录(/lib 和 /usr/lib 除外,它们会自动包含在其中)的清单,动态装入器将在其中查找共享库。

所以要想添加一个动态库 只需要添加到ld.so.conf文件中

ldconfig

ldconfig是一个动态链接库管理命令,其目的为了让动态链接库为系统所共享。

1、往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf文件的,但是添加完后需要调用下ldconfig,不然添加的library会找不到。

2、如果添加的library不在/lib和/usr/lib里面的话,就一定要修改/etc/ld.so.conf文件,往该文件追加library所在的路径,然后也需要重新调用下ldconfig命令。

环境变量 /etc/profile

/etc/profile中存储了对于所有用户的环境变量
可以用来添加头文件编译路径

例如

export PATH =$PATH:/usr/local/openssl/bin
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/openssl/lib  
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openssl/lib
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/openssl/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/openssl/include  


: 表示并列含义,例如A变量值有多个,用:符号进行分离。

$PATH表示原来的内容 :并列加上新的路径
一般改这五个
LIBRARY_PATH:静态库
LD_LIBRARY_PATH:动态库
C_INCLUDE_PATH:编译器头文件
PATH:可执行程序路径

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值