Пожалуйста, смотрите ОБНОВЛЕНИЕ в нижней части этого поста для получения дополнительной информации.
Ниже приведена программа _pqos_api_lock из шапки. c из дистрибутива Intel CMT-CAT (технология управления кэшем - технология выделения кэша) на https://github.com/intel/intel-cmt-cat.
Функция _pqos_api_lock вызывает lockf, который определен в unistd.h, а unistd.h включен в include в верхней части файла. Однако, отлаживая с помощью gdb, я получаю «lockf. c: нет такого файла или каталога» в строке:
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, так почему я получаю эту ошибку? Я нашел источник для lockf. c в https://code.woboq.org/userspace/glibc/io/lockf.c.html - возможно, я могу связать это с моим исполняемым файлом, хотя это звучит как kludge.
Вот исходный код _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 - при необходимости, пожалуйста, спросите, и я опубликую все это.
I ' m в Ubuntu 18.04, и я скомпилировал с Clang.
Спасибо за любые идеи.
ОБНОВЛЕНИЕ:
В своем ответе ниже "Занятый русский" показывает, что "не может найти источник" 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");
}
The l ine "if (lockf (m_apilock, F_LOCK, 0)! = 0)" завершается неудачно, потому что согласно gdb:
p (int) F_LOCK Нет символа "F_LOCK" в текущем контексте.
То похоже на ошибку в программе, распространяемой Intel.