lockf.c: 没有那个文件或目录

lockf.c: No such file or directory

有关详细信息,请参阅此 post 底部的更新。

下面是来自 cap.c 来自 https://github.com/intel/intel-cmt-cat 的 Intel CMT-CAT 发行版(缓存管理技术 - 缓存分配技术)的 _pqos_api_lock 程序。

函数_pqos_api_lock调用lockf,它在unistd.h中定义,并且unistd.h包含在文件顶部的include中。但是,使用 gdb 调试时,我在行中得到 "lockf.c: No such file or directory":

if (lockf(m_apilock, F_LOCK, 0) != 0)
          err = 1;

回到命令行,"locate lockf.c" and "find lockf.c 调出:

find: ‘lockf.c’: No such file or directory

我已经包含了 unistd.h,为什么会出现这个错误?我在 https://code.woboq.org/userspace/glibc/io/lockf.c.html 找到了 lockf.c 的源代码——也许我可以 link 把它放到我的可执行文件中,尽管这听起来有点乱七八糟。

这是 _pqos_api_lock 的源代码:

#include <stdlib.h>
[ other includes omitted ]

void _pqos_api_lock(void)
{
        int err = 0;

        if (lockf(m_apilock, F_LOCK, 0) != 0)
                err = 1;

        if (pthread_mutex_lock(&m_apilock_mutex) != 0)
                err = 1;

        if (err)
                LOG_ERROR("API lock error!\n");
}

cap.c 的完整源代码有 1,722 行,所以我没有在此处包含所有代码,但如果需要,可以在上面的 github link 中找到它,请询问,我会 post 这一切。

我在 Ubuntu 18.04,我用 Clang 编译。

感谢任何想法。

更新:

在下面的回答中,Employed Russian 显示 "cannot find source lockf.c" 是一条 gdb 消息,表明它无法访问 lockf.c。但是,现在出现错误:

void _pqos_api_lock(void)
{
        int err = 0;

        if (lockf(m_apilock, F_LOCK, 0) != 0)
                err = 1;

        if (pthread_mutex_lock(&m_apilock_mutex) != 0)
                err = 1;

        if (err)
                LOG_ERROR("API lock error!\n");
}

"if (lockf(m_apilock, F_LOCK, 0) != 0)" 行失败,因为根据 gdb:

p(整数)F_LOCK 当前上下文中没有符号 "F_LOCK"。

这看起来像是英特尔分发的程序中的一个错误。

I have unistd.h included, so why do I get this error?

您似乎没有理解这个错误的意义(即none)。这个错误可以安全地忽略,并且不会以任何方式影响程序的执行

GDB 显示此错误的原因是 GDB 无法向您显示源(因为 GDB 不知道该源在哪里)。

很有可能,您实际上根本不想看到这个来源。

I found source for lockf.c at https://code.woboq.org/userspace/glibc/io/lockf.c.html

很好。如果你真的想看看 locf 的作用,你可以去那里看看。

perhaps I can link this into my executable

lockf.c 中定义的 函数 已经 link 编辑到您的可执行文件中(您会得到如果不是,则为 link 错误)。您不能 link 向可执行文件中输入源代码,就像您不能 link 厨房水槽一样。

你可以做的是 install libc6-dbg 包,其中包含 all GLIBC 的源代码,and 允许 GDB 自动.

查找源