微服务化是当前主流架构理念,谈到微服务离不开API网关和服务治理相关内容。目前使用较多的大概有以dubbo、spring cloud为代表的java系和以空openresty为代表的C系。
在安装KONG时遇到各种依赖问题,这里做部分整理,其中有一个问题比较有代表性,问题报错如下:
[root@localhost work]# luarocks install luaossl-20190731-0.src.rock luaossl 20190731-0 depends on lua (5.1-1 provided by VM) Applying patch config.h.diff... Hunk 1 found at offset 2... gcc -O2 -fPIC -I/usr/local/openresty/luajit/include/luajit-2.1 -c src/openssl.c -o src/openssl.o -D_REENTRANT -D_THREAD_SAFE -DCOMPAT53_PREFIX=luaossl -D_GNU_SOURCE -I/usr/include -I/usr/include gcc -O2 -fPIC -I/usr/local/openresty/luajit/include/luajit-2.1 -c vendor/compat53/c-api/compat-5.3.c -o vendor/compat53/c-api/compat-5.3.o -D_REENTRANT -D_THREAD_SAFE -DCOMPAT53_PREFIX=luaossl -D_GNU_SOURCE -I/usr/include -I/usr/include gcc -shared -o _openssl.so src/openssl.o vendor/compat53/c-api/compat-5.3.o -L/usr/lib64 -L/usr/lib64 -Wl,-rpath,/usr/lib64 -Wl,-rpath,/usr/lib64 -lssl -lcrypto -lpthread -lm -ldl /usr/bin/ld: cannot find -lssl /usr/bin/ld: cannot find -lcrypto collect2: error: ld returned 1 exit status Error: Build error: Failed compiling module _openssl.so
报错的核心意思是gcc编译过程中在调用ld时,找不到-lssl和-lcrypto,通过man ld查看帮助,-l参数是在LD_LIBRARY_PATH下查找动态库,查找文件名规则实际是libXXX.so,对应到本例的报错信息,就是在LD_LIBRARY_PATH下找不到libssl.so和。
那么LD_LIBRARY_PATH到底是什么呢?
echo $LD_LIBRARY_PATH
返回的是空,也就是说不存在该环境变量,但是ld肯定是有默认加载路径的,怎么知道默认查找路径呢?man手册中也有说明:
root@localhost work]# ld lssl --verbose GNU ld version 2.27-43.base.el7 Supported emulations: elf_x86_64 ... using internal linker script: ================================================== /* Script for -z combreloc: combine and sort reloc sections */. OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") OUTPUT_ARCH(i386:x86-64) ENTRY(_start) SEARCH_DIR("=/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("=/usr/lib64"); ......SEARCH_DIR("=/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
以上的 SEARCH_DIR就是查找路径,按理说标准的系统中各种ssl等基础库应该是全的,那到底有没有呢?
[root@localhost kong-master]# find / -name libssl.so* /usr/lib64/libssl.so.10 /usr/lib64/libssl.so.1.0.2k /usr/local/openssl/lib/libssl.so.1.1 /usr/local/openssl/lib/libssl.so /home/work/source/openssl-1.1.1g/libssl.so.1.1 /home/work/source/openssl-1.1.1g/libssl.so
系统中其实是有相应的动态库的,只不过版本还有差别.10就是版本号了,那剩下就容易了,如果不关注版本号,找一个建个软连接就可以了。
ln -s libcrypto.so.10 libcrypto.so
以上问题在linux下安装软件时经常会遇到,解决思路可参考本文。
相关推荐
CentOS7安装Git
CentOS 7.1 离线安装API -kong所需依赖包
CentOS7安装指南
在Centos7安装golang教程
CentOS 7 安装 MySQL
centos7安装详细教程centos7安装详细教程centos7安装详细教程centos7安装详细教程centos7安装详细教程centos7安装详细教程centos7安装详细教程centos7安装详细教程centos7安装详细教程centos7安装详细教程centos7...
centos7安装配置mysql5.7教程全
Centos7下安装MongoDB
在本地虚拟机的场合,需要更换yum安装网络地址配置文件CentOS-Base.repo 从阿里云服务器下载一份CentOS-Base.repo文件存到本地
CentOS 7 安装linux
centos7离线安装bison
centos7离线安装vim
CentOS7下安装oracle11g具体步骤
centos7离线安装bzip2
centos7亲测安装成功,摘自网上一个帖子,忘了出处,若有人知道望告知,添加链接,谢谢!
centos7离线源码安装make
CentOS7安装mysql5.7.19 & mysql5.7.19主从配置(CentOS7)
CentOS7离线安装oracle 11g_r2所有离线依赖包,并附详细安装说明,安装详细说明和依赖包,轻松在CentOS7安装oracle
Centos7安装部署Oracle RAC 11G说明文档,Oracle 11g R2安装,RAC环境搭建