fuse-j 在fuse3.1.1版本编译

        最近在忙毕业设计,毕业设计中有用到fuse设计自己的文件系统,听上去很高大上有没有!其实如果你看两天fuse的使用后,开发用户空间的文件系统就简单的一批。感兴趣的朋友可以看使用fuse开发自己的文件系统。

       fuse支持多种语言绑定,例如python,java等,因为我的毕业设计与java语言关系比较密切,所以,这里我选择用fuse-j做文件系统的开发。 fuse-j是fuse的一个java语言包,也就是说 fuse-j的运行仍然依附于fuse。因此使用fuse-j之前先要将fuse内核组件和库加载进内核,这里我使用的是fuse3.1.1,下载并解压 运行./configure然后make。之后就是搞定fuse-j了首先 解压fuse-j-2.4-prerelease1.tar.gz。 新建build文件夹,并修改build.conf文件中的JAVA_HOME为自己的JAVA_HOME路径

make出错


fuse-j 在fuse3.1.1版本编译_第1张图片

打开jni目录下的javafs.h文件 修改FUSE_USE_VERSION 为31 并修改jni下makefile 在INCLUDES第一个include后面加fuse3

编译报错

fuse-j 在fuse3.1.1版本编译_第2张图片

这和fuse 版本有关系 fuse3.1 取消了getdir函数和utime函数这里可以修改成readdir()和utimens()函数并重写,也可以直接注释getdir函数 和utime函数以及fuse_operations 中的对应指针。这里我直接选择了注释  。吱吱。

继续编译

fuse-j 在fuse3.1.1版本编译_第3张图片

出现了fuse_main参数问题 在出问题的fuse_main最后一个参数加上NULL,

fuse-j 在fuse3.1.1版本编译_第4张图片

1397行 fill_dir末尾加上0

编译

fuse-j 在fuse3.1.1版本编译_第5张图片

找不到 -lfuse

在jni makefile文件中 修改-lfuse为 -lfuse3编译成功

fuse-j 在fuse3.1.1版本编译_第6张图片


总体来说不是特别难,主要是fuse-j基于的fuse版本过于低,导致使用fuse3.1的时候有很多函数找不到,写下这篇文章希望大家能够更快解决fuse-j在fuse3.1.1下的版本问题


你可能感兴趣的:(fuse-j 在fuse3.1.1版本编译)