【发布时间】:2020-06-26 10:21:49
【问题描述】:
有关更多信息,请参阅本文底部的更新。
下面是来自英特尔 CMT-CAT 发行版(缓存管理技术 - 缓存分配技术)的 cap.c 的 _pqos_api_lock 程序,地址为https://github.com/intel/intel-cmt-cat。
函数_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”和“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 的源代码——也许我可以将它链接到我的可执行文件中,尽管这听起来像是一个杂牌。
这里是_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 链接中找到它——如果需要,请询问,我会全部发布。
我在 Ubuntu 18.04 上,使用 Clang 编译。
感谢您的任何想法。
更新:
在下面的回答中,Employed Russian 表明“找不到源 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 (int) F_LOCK 当前上下文中没有符号“F_LOCK”。
这看起来像是英特尔分发的程序中的错误。
【问题讨论】: