现在的位置: 首页 > 综合 > 正文

FUSE的程序的编译

2012年12月31日 ⁄ 综合 ⁄ 共 732字 ⁄ 字号 评论关闭
通过configure生成的makefile文件,直接make即可将FUSE中所有的example都进行编译。但是如果要单独编译其中的某个例子,或者编译自己写好的文件系统,按照文档的说法是这样的:
 
Gcc -Wall `pkg-config fuse --cflags --libs` hello.c -o hello
 
注意“ ` ”是键盘左上角,数字1左边的那个按键,而不是单引号。但实际上使用这个命令编译时会报链接错误:“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` 
 
即可顺利通过编译。关于gcc的参数说明,具体详情参见gcc的官方文档,此处不再引用。

抱歉!评论已关闭.