我在将函数(ext3_get_inode_loc)调用到其他几个文件中的exec.c时出现问题。
我应该提一下,我对此很新,完全是自学成才,所以我确信我有很大的知识差距。我真正感激的是关于我缺少什么和/或在哪里寻找答案的指示或建议。
以下是来自Linux-3.10.0.123.20.1.el7目录的递归grep的结果 -
"grep ext3_get_inode_loc -R *"
fs/ext3/inode.c:
fs/ext3/inode.c:static int __ext3_get_inode_loc(struct inode *inode,
fs/ext3/inode.c:ext3_error (inode->i_sb, ext3_get_inode_loc",
fs/ext3/inode.c:ext3_error(inode->i_sb, ext3_get_inode_loc",
fs/ext3/inode.c:int ext3_get_inode_loc(struct inode *inode, struct ext3_iloc *iloc)
fs/ext3/inode.c:return __ext3_get_inode_loc(inode, iloc,
fs/ext3/inode.c:ret = __ext3_get_inode_loc(inode, &iloc, 0);
fs/ext3/inode.c:err = ext3_get_inode_loc(inode, iloc);
fs/ext3/inode.c:err = ext3_get_inode_loc(inode, &iloc);
fs/ext3/ext3.h:extern int ext3_get_inode_loc(struct inode *, struct ext3_iloc *);
fs/ext3/xattr.c:error = ext3_get_inode_loc(inode, &iloc);
fs/ext3/xattr.c:error = ext3_get_inode_loc(inode, &iloc);
fs/ext3/xattr.c:error = ext3_get_inode_loc(inode, &is.iloc);
表明它仅存在于这3个文件中 -
ext3.h
inode.c
xattr.c
ext3.h包含函数原型
extern int ext3_get_inode_loc(struct inode *, struct ext3_iloc *);
inode.c和xattr.c都包含ext3.h,为两个文件提供原型
#include "ext3.h"
inode.c包含函数定义 -
static int __ext3_get_inode_loc(struct inode *inode, struct ext3_iloc *iloc, int in_mem)
{
ext3_fsblk_t block;
struct buffer_head *bh;
block = ext3_get_inode_block(inode->i_sb, inode->i_ino, iloc);
if (!block)
return -EIO;
bh = sb_getblk(inode->i_sb, block);
.
.
... and so forth
}
函数调用自身 -
err = ext3_get_inode_loc(inode, iloc);
xattr.c仅包含调用,而不包括定义 -
error = ext3_get_inode_loc(inode, &iloc);
我的问题是,如果我添加完全相同的代码行 -
error = ext3_get_inode_loc(inode, &iloc);
以与xattr.c相同的方式在exec.c中执行open_exec()(没有函数定义)在使用" make"进行编译时出现以下错误 -
fs/built-in.o: In function `open_exec':
~/linux-3.10.0-123.20.1.el7/fs/exec.c:828: undefined reference to `ext3_get_inode_loc'
为什么函数可用于xattr.c而不是exec.c?我已经搜索了相当多的内容,并且已经读过这可能是由于exec.c和xattr.c之间存在链接问题(或缺少链接问题)
提前谢谢 - 罗格
答案 0 :(得分:0)
ext3_get_inode_loc
是ext3驱动程序的本地驱动程序,位于fs / ext3。你不能在驱动程序代码之外调用它。