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 自动.
查找源
有关详细信息,请参阅此 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 自动.