掉坑了,小乌龟SVN默认提交的文件竟然不含 .so

it2023-02-07  47

背景

发现一个小问题,归档项目部署包中竟然没有第三方 JNI 库,它是一个用 C 语言实现的 .so 文件。这导致项目部署的时候报 JNI 加载失败错误,具体怎么回事儿呢?

加载 JNI 异常问题

有一个项目的权限校验功能为了增加一点点可靠性,而采用 C 实现的。虽然 C 也能反编译,但是多少增加了一点成本,所以心理感觉还是靠谱一点。C 编译后的库函数是一个 .so 文件,放在项目 bin 目录下。

昨天从 SVN 检出部署包部署时,应用报了一个错:

java.lang.UnsatisfiedLinkError: Can't load library: /app/bin/xxx.so at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824) at java.lang.Runtime.load0(Runtime.java:809) at java.lang.System.load(System.java:1086)

定位发现 bin 目录下没有 .so 库文件,怀疑是 SVN 上传的问题。

验证 SVN 对 so 文件的行为

验证了一下,新增五个文件,三种不同类型,右键“commit" 操作时,无版本的新文件中只有两个: 问题根源,右键 SVN 配置信息,ignore 列表中包含了几种:

解决办法

移除上述红框中的 *.so 配置即可:

启示录

为什么默认文件排除了 .so 文件呢?可能是为了安全吧,自定义库毕竟是外来的,不一定靠谱。

大概现在用 SVN 的公司很稀少了吧,前两天有网友评论说还用 SVN 的公司,技术应该也很落后。工具也存在鄙视链啊,看来我也得补充一点 Git 的知识了!

最新回复(0)