小议linux中的软链接------顺便谈谈为什么编译有时会出现cannot find -lssl, cannot find -lcrypto

时间:2023-01-13 14:51:49

         linux中的软链接其实是很好理解的, 非常类似于Windows下的快捷方式, 我们来做个简单的实验玩玩:

[taoge@localhost test]$ echo hello > a.txt
[taoge@localhost test]$ ln -s a.txt b.txt
[taoge@localhost test]$ diff a.txt b.txt 
[taoge@localhost test]$ ll
total 4
-rw-rw-r-- 1 taoge taoge 6 Nov  4 07:27 a.txt
lrwxrwxrwx 1 taoge taoge 5 Nov  4 07:27 b.txt -> a.txt
[taoge@localhost test]$ 
[taoge@localhost test]$ 
[taoge@localhost test]$ 
[taoge@localhost test]$ echo world >> a.txt
[taoge@localhost test]$ diff a.txt b.txt 
[taoge@localhost test]$ 
[taoge@localhost test]$ 
[taoge@localhost test]$ 
[taoge@localhost test]$ echo c++ >> b.txt
[taoge@localhost test]$ diff a.txt b.txt 
[taoge@localhost test]$ 
[taoge@localhost test]$ 
[taoge@localhost test]$ 
[taoge@localhost test]$ rm b.txt 
[taoge@localhost test]$ cat a.txt 
hello
world
c++
[taoge@localhost test]$ 
[taoge@localhost test]$ 
[taoge@localhost test]$ 
[taoge@localhost test]$ ln -s a.txt b.txt
[taoge@localhost test]$ diff a.txt b.txt 
[taoge@localhost test]$ rm a.txt
[taoge@localhost test]$ cat b.txt 
cat: b.txt: No such file or directory
[taoge@localhost test]$ ll
total 0
lrwxrwxrwx 1 taoge taoge 5 Nov  4 07:29 b.txt -> a.txt   (注意, 此处的a.txt在闪动)
[taoge@localhost test]$ 

        根据如上实验和结果, 我们知道, 软链接其实就是快捷方式。 有时候, 我们也把软链接叫符号链接。 大家可以根据上述小实验轻易地总结出软链接的特点, 我就不费口舌了。


        下面, 我们继续来看小实验:

[taoge@localhost test]$ ls
main.c
[taoge@localhost test]$ cat main.c 
#include <stdio.h>

int main()
{
        printf("hello world\n");
        return 0;
}
[taoge@localhost test]$ gcc main.c 
[taoge@localhost test]$ ./a.out 
hello world
[taoge@localhost test]$ 
[taoge@localhost test]$ 
[taoge@localhost test]$ ./x
-bash: ./x: No such file or directory
[taoge@localhost test]$ ln -s a.out x
[taoge@localhost test]$ ./x
hello world
[taoge@localhost test]$ 
        看了这个小实验, 我无需多说软连接的用法和用途了。


        在实际开发中, 偶尔会遇到cannot find -lssl, cannot find -lcrypto这样的问题, 是什么原因呢? 因为找不到libssl.so库和libcrypto.so这样的库,那怎么办呢? 用软链接吧。 在root权限下进入到/usr/lib中去:

[root@localhost lib]# ll | grep ssl
-rwxr-xr-x   1 root root   216656 Aug 27  2010 libssl3.so
lrwxrwxrwx.  1 root root       15 Mar 24  2015 libssl.so.10 -> libssl.so.1.0.0
-rwxr-xr-x   1 root root   355280 Jun 30  2010 libssl.so.1.0.0
drwxr-xr-x.  3 root root     4096 Mar 24  2015 openssl
[root@localhost lib]# 
[root@localhost lib]# 
[root@localhost lib]# ll | grep crypto
lrwxrwxrwx.  1 root root       18 Mar 24  2015 libcrypto.so.10 -> libcrypto.so.1.0.0
-rwxr-xr-x   1 root root  1596748 Jun 30  2010 libcrypto.so.1.0.0
[root@localhost lib]# 
        可以看到, 是有类似库的, 只是文件名不完全吻合, 现在又不想改原来的文件名, 那怎么办呢? 用软链接吧, 搞定。


        软链接的本质就是快捷方式,很常用, 更多的讲述似乎没有必要了。