我正在尝试构建mvfs
,以便可以在 CentOS 6.4 机器上运行 IBM Rational ClearCase。我已安装所有依赖项,因此我 cd 到该mvfs_src
文件夹并在运行时收到以下错误make
:
/var/adm/rational/clearcase/mvfs/mvfs_src/mvfs_linux_mvops.c: In function ‘mvop_linux_open_kernel’:
/var/adm/rational/clearcase/mvfs/mvfs_src/mvfs_linux_mvops.c:1454: error: implicit declaration of function ‘get_empty_filp’
cc1: warnings being treated as errors
/var/adm/rational/clearcase/mvfs/mvfs_src/mvfs_linux_mvops.c:1454: error: assignment makes pointer from integer without a cast
make[2]: *** [/var/adm/rational/clearcase/mvfs/mvfs_src/mvfs_linux_mvops.o] Error 1
make[1]: *** [_module_/var/adm/rational/clearcase/mvfs/mvfs_src] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.32-358.14.1.el6.x86_64'
make: *** [all] Error 2
我该如何解决?
答案1
作为提交 e81e3f4dca6c54116a24aec217d2c15c6f58ada5(进入 Linux v2.6.33),该函数get_empty_filp()
变为内部函数并且不再导出到模块:
提交 e81e3f4dca6c54116a24aec217d2c15c6f58ada5 作者:Eric Paris 日期:2009 年 12 月 4 日星期五 15:47:36 -0500 fs:将 get_empty_filp() 定义移至 internal.h 已删除 fs/ 之外的所有 get_empty_filp() 用户。此补丁 将定义从include/目录移动到internal.h,因此没有新的 用户突然出现并删除了 EXPORT_SYMBOL。[…]
相同的提交似乎已被移植到 CentOS 内核 2.6.32-358.14.1.el6,因为它具有在中声明的相同函数fs/internal.h
:
linux-2.6.32-358.14.1.el6/fs/internal.h:88:extern struct file *get_empty_filp(void);
换句话说,mvfs
它不仅过时了,甚至已经过时了对于 CentOS。我猜测解决这个问题的唯一方法是获取较新的mvfs
版本(如果存在的话),或者......降级内核。