链接
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:可执行程序路径