fuse-2.9.0编译 安装到 板子上
2012-06-08 09:24
162 查看
FUSE介绍:
用户空间文件系统(Filesystem in Userspace,简称FUSE)是操作系统中的概念,指完全在用户态实现的文件系统。目前Linux通过内核模块对此进行支持。一些文件系统如ZFS,glusterfs和lustre使用FUSE实现。
Linux用于支持用户空间文件系统的内核模块名叫FUSE,FUSE一词有时特指Linux下的用户空间文件系统。
在我个人看来,fuse就是一层虚构的中间层,承接上层指令,扩充下层操作,达到所谓的"欺骗"行为。主要用途在于一些比较苛刻的地方,比如必须以某种形式返回给上层命令指定的值,才能继续正常交互。我本次主要解决的是一个文件名后缀的问题,如果直接返回,会没有后缀,导致程序无法继续正常进行;所以我在这个中间模拟一层上层指令的响应,使后缀名能够正常返回给上层。That's all。
1.下载fuse-2.9.0:
Download (HTTP): http://downloads.sourceforge.net/fuse/fuse-2.9.0.tar.gz
2.在虚拟机里面编译库:
tar -zxvf fuse-2.9.0.tar.gz
./configure --host=mipsel-linux --prefix=/opt/brcm/fuse-2.9.0-release/
make&&make install
modprobe fuse
3.在板子上加入动态库的支持:
// 把虚拟机里面的库拷贝到PC上:
cp fuse-2.9.0-release/lib/libfuse.so.2.9.0 /mnt/hgfs/bcm/distrib/
// 把PC上的库拷贝到板子上:
cp libfuse.so.2.9.0 /usr/local/lib/
cd /usr/local/lib/
ln -sf libfuse.so.2.9.0 libfuse.so.2
4.在编译程序时,要加入:
CFLAGS += -I/***/fuse-2.9.0-release/include/
LFLAGS += -L/***/fuse-2.9.0-release/lib/ -lfuse
(其中 *** 代表你编译fuse之后库所存放的目录绝对路径)。
5.如果程序编译出错:
fuse_common.h:33:2: error: #error Please add -D_FILE_OFFSET_BITS=64 to your compile flags!
解决方案一:
在你的程序Makefile编译选项里面加入:
-Wall `pkg-config fuse --cflags --libs` -D_FILE_OFFSET_BITS=64
比如我的: $(CC) -o $(TARGET) $(APPOBJ) $(LFLAGS) $(CFLAGS)
修改成: $(CC) -Wall `pkg-config fuse --cflags --libs` -D_FILE_OFFSET_BITS=64 -o $(TARGET) $(APPOBJ) $(LFLAGS) $(CFLAGS)
解决方案二:
makefile中加入红色字体部分:
CFLAGS += -I/***/fuse-2.9.0-release/include/ -D_FILE_OFFSET_BITS=64 -D_REENTRANT
LFLAGS += -L/***/fuse-2.9.0-release/lib/ -lfuse
编译时直接: $(CC) -o $(TARGET) $(APPOBJ) $(LFLAGS) $(CFLAGS)即可。
用户空间文件系统(Filesystem in Userspace,简称FUSE)是操作系统中的概念,指完全在用户态实现的文件系统。目前Linux通过内核模块对此进行支持。一些文件系统如ZFS,glusterfs和lustre使用FUSE实现。
Linux用于支持用户空间文件系统的内核模块名叫FUSE,FUSE一词有时特指Linux下的用户空间文件系统。
在我个人看来,fuse就是一层虚构的中间层,承接上层指令,扩充下层操作,达到所谓的"欺骗"行为。主要用途在于一些比较苛刻的地方,比如必须以某种形式返回给上层命令指定的值,才能继续正常交互。我本次主要解决的是一个文件名后缀的问题,如果直接返回,会没有后缀,导致程序无法继续正常进行;所以我在这个中间模拟一层上层指令的响应,使后缀名能够正常返回给上层。That's all。
1.下载fuse-2.9.0:
Download (HTTP): http://downloads.sourceforge.net/fuse/fuse-2.9.0.tar.gz
2.在虚拟机里面编译库:
tar -zxvf fuse-2.9.0.tar.gz
./configure --host=mipsel-linux --prefix=/opt/brcm/fuse-2.9.0-release/
make&&make install
modprobe fuse
3.在板子上加入动态库的支持:
// 把虚拟机里面的库拷贝到PC上:
cp fuse-2.9.0-release/lib/libfuse.so.2.9.0 /mnt/hgfs/bcm/distrib/
// 把PC上的库拷贝到板子上:
cp libfuse.so.2.9.0 /usr/local/lib/
cd /usr/local/lib/
ln -sf libfuse.so.2.9.0 libfuse.so.2
4.在编译程序时,要加入:
CFLAGS += -I/***/fuse-2.9.0-release/include/
LFLAGS += -L/***/fuse-2.9.0-release/lib/ -lfuse
(其中 *** 代表你编译fuse之后库所存放的目录绝对路径)。
5.如果程序编译出错:
fuse_common.h:33:2: error: #error Please add -D_FILE_OFFSET_BITS=64 to your compile flags!
解决方案一:
在你的程序Makefile编译选项里面加入:
-Wall `pkg-config fuse --cflags --libs` -D_FILE_OFFSET_BITS=64
比如我的: $(CC) -o $(TARGET) $(APPOBJ) $(LFLAGS) $(CFLAGS)
修改成: $(CC) -Wall `pkg-config fuse --cflags --libs` -D_FILE_OFFSET_BITS=64 -o $(TARGET) $(APPOBJ) $(LFLAGS) $(CFLAGS)
解决方案二:
makefile中加入红色字体部分:
CFLAGS += -I/***/fuse-2.9.0-release/include/ -D_FILE_OFFSET_BITS=64 -D_REENTRANT
LFLAGS += -L/***/fuse-2.9.0-release/lib/ -lfuse
编译时直接: $(CC) -o $(TARGET) $(APPOBJ) $(LFLAGS) $(CFLAGS)即可。
相关文章推荐
- Hadoop fuse_dfs编译与安装
- 板子中交叉编译(curl工具的安装编译)
- Hadoop fuse_dfs编译与安装
- hadoop 2.2.0 fuse 编译及安装
- fuse的编译安装(Centos7-minimal)
- hadoop 2.0.0 fuse 安装 libhdfs fuse-dfs 编译
- 编译并安装FUSE
- e2fsprogs 编译安装(x86/ARM)[2013-10-21更新]
- 交叉编译工具链的arm-elf-tools的正确安装(fedora7虚拟机环境)
- CentOS 6.4下编译安装MySQL 5.6.14
- 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
- vs2008 安装编译poco c++
- 在Centos 5.5 上编译安装mysql 5.5.9
- 安装Vs2012后,编写Vc++程序找不到系统头文件和导致VS2010工程编译的问题
- nginx+apache实现负载均衡+动静分离配置(编译安装)
- SQLite的编译、安装和使用
- cent os下编译安装php mongodb扩展教程
- Linux 编译安装Boost (转)
- 源码编译安装PHP和Apache(解决php通过yum安装版本低的问题)
- 编译安装mysql 5.6.30