版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
找了一下午,网上文章有很多,但都不适用,因为我是通过容器进行部署服务,然后容器加载.so动态链接文件,所以网上大多数文章是设置Linux的动态链接地址,这里统一记录一下解决方法:
1、Linux设置LD_LIBRARY_PATH环境变量
普通的 Jar 包加载so可以通过这种方式设置动态链接目录,目录下是你的 .so 动态链接文件
$ vim /etc/profile
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/oas/
$ source /etc/profile
假如动态链接文件名叫做 libauthd.so,Java代码中有两种方式加载,绝对路径方式可以添加上述动态链接库所在目录的环境变量,相对路径方式需要设置上述动态链接库所在目录的环境变量
System.load("/usr/local/oas/library/auth/libauthd.so");
System.loadLibrary("authd");
2、容器加载.so文件
如果是容器部署,需要将.so文件加入到容器中,才可以找到这个.so文件,否则死活也不会找到的,k8s deploy资源文件中,我将宿主机和容器的.so所在目录都配置为 /usr/local/oas/library/auth,当然程序所需要的 .so 文件也需要在 /usr/local/oas/library/auth 下,这样就可以将 .so 文件挂载到容器中了,然后我 Java 代码使用 System.load("/usr/local/oas/library/auth/libauthd.so"); 的方式去加载容器中的 .so动态链接文件,下面是我的资源文件配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: openailab-security-auth-service
namespace: oas-dev
labels:
name: openailab-security-auth-service
spec:
replicas: 1
selector:
matchLabels:
name: openailab-security-auth-service
template:
metadata:
labels:
name: openailab-security-auth-service
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: env
operator: In
values:
- dev
containers:
- name: openailab-security-auth-service
image: 10.12.1.202:8088/oascloud/openailab-security-auth-service:latest
env:
- name: APOLLO_APP_ID
value: 'openailab-security-auth-service'
- name: APOLLO_EUREKA_URI
value: 'http://10.98.100.95:8080/'
- name: APOLLO_NAMESPACE
value: 'application'
- name: SPRING_EUREKA_URI
value: 'http://10.111.176.152:8080/eureka/'
volumeMounts:
- name: openailab-security-auth-service
mountPath: /usr/local/logs
- name: auth-library
mountPath: /usr/local/oas/library/auth
command: ['sh','-c','java -server -Xms512m -Xmx1024m -Djava.io.tmpdir=/var/tmp -Duser.timezone=Asia/Shanghai -jar openailab-security-auth-service-*.jar --server.port=8080 --spring.profiles.active=remote']
ports:
- containerPort: 8080
resources:
requests:
memory: 512Mi
cpu: 250m
limits:
memory: 1024Mi
cpu: 500m
initContainers:
- name: init-apollo
image: busybox
command: ['sh', '-c']
args:
- echo Prepare to apollo initialize..;
until nc -w 1 -z 10.98.100.95 8080;
do echo Waiting for eureka initialization to complete..; sleep 10; done;
echo Eureka is ready.;
until nc -w 1 -z 10.98.100.95 8090;
do echo Waiting for admin initialization to complete..; sleep 10; done;
echo Admin is ready.;
echo Apollo Initialization successful!;
volumes:
- name: openailab-security-auth-service
hostPath:
path: /usr/local/logs
- name: auth-library
hostPath:
path: /usr/local/oas/library/auth
到此问题解决,如果各位有解决不了的,可以评论区联系我。