`

CentOS7 安装kong API 网关

阅读更多

微服务化是当前主流架构理念,谈到微服务离不开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下安装软件时经常会遇到,解决思路可参考本文。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics