FUSE 程序的编译

FUSE是一个用户态的文件系统框架,使用这个框架设计一个文件系统很简单,由于是初学,就直接到了example文件夹下,看了看文件内的编译命令是

Gcc -Wall `pkg-config fuse --cflags --libs` hello.c -o hello

自己一试,发现完全不行,报错是FUSE_MAIN_REAL()找不到实现,找了半天发现有一篇帖子

实际上这个函数的实现在helper.c中,并且被编译到了相应的链接库中。究其原因,其实是gcc的命令行参数传入的顺序问题。`pkg-config fuse --cflags --libs`这个东西,可以把它理解成一个在fuse安装时定义的变量,可以在终端中输入echo `pkg-config fuse --cflags --libs`即可看到这个变量展开之后所表示的gcc的命令行参数,应该是这种形式“-D_FILE_OFFSET_BITS64 -I/usr/includefuse -pthread -lfuse -lrt=”。其中包含了一个-lfuse命令,它的作用是链接fuse相应的链接库,也就是告诉编译器去哪里能找到fuse_main_real()的实现。事实上gcc要求链接库的命令行参数要放在源代码文件之后,所以将上面的命令改成:

 

Gcc -Wall hello.c -o hello `pkg-config fuse --cflags --libs` 


成功,其实这个错误我找了很久,看了很多外国的网站人家都解决不了(还是人家没这种问题不得而知),国人还是有很多大牛的。

你可能感兴趣的:(FUSE 程序的编译)