代码之家  ›  专栏  ›  技术社区  ›  RTC222

lockf.c:没有这样的文件或目录

  •  0
  • RTC222  · 技术社区  · 5 年前

    更多信息,请看这篇文章底部的更新。

    https://github.com/intel/intel-cmt-cat .

    函数pqos_api_lock调用在unistd.h中定义的lockf,unistd.h包含在文件顶部的include中。但是,使用gdb进行调试时,我在下面的行中得到“lockf.c:No such file or directory”:

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

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

    我包括unistd.h,为什么会出现这个错误?我在 https://code.woboq.org/userspace/glibc/io/lockf.c.html --也许我可以将它链接到我的可执行文件中,尽管这听起来像是一个错误。

    以下是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的完整源代码有1722行,所以我没有在这里包括所有的代码,但是可以在上面的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(LOCK F(m_apilock,F_LOCK,0)!=0)“失败,因为根据gdb:

    内锁

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

    0 回复  |  直到 5 年前
        1
  •  1
  •   Employed Russian    5 年前

    我包括unistd.h,为什么会出现这个错误?

    你似乎不明白这个错误的重要性 没有人 ). 这个错误可以安全地忽略,并且不会影响程序在 无论如何

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

    希望

    我在 https://code.woboq.org/userspace/glibc/io/lockf.c.html

    很好。如果你真的想看看 locf

    也许我可以把它链接到我的可执行文件中

    这个 功能 定义于 lockf.c 已经 链接到你的可执行文件(如果不是,你会得到一个链接错误)。你不能把源链接到你的可执行文件,就像你可以把你的厨房水槽链接到它一样。

    你能做的就是 安装 libc6-dbg 全部的 关于GLIBC, 允许GDB查找源 自动 .