Проблемы с установкой google/benchmark

Вопрос или проблема

У меня проблемы с установкой google/benchmark на Ubuntu 16.04.4 LTS с использованием cmake.

Вот что я сделал до сих пор:

$ git clone https://github.com/google/benchmark.git
[...]
$ git clone https://github.com/google/googletest.git
[...]
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=RELEASE
-- Идентификация компилятора C: GNU 5.4.0
-- Идентификация компилятора CXX: Clang 3.8.0
-- Проверка работающего компилятора C: /usr/bin/cc
-- Проверка работающего компилятора C: /usr/bin/cc -- работает
-- Извлечение информации о C compiler ABI
-- Извлечение информации о C compiler ABI - завершено
-- Определение возможностей компиляции C
-- Определение возможностей компиляции C - завершено
-- Проверка работающего компилятора CXX: /usr/bin/c++
-- Проверка работающего компилятора CXX: /usr/bin/c++ -- работает
-- Извлечение информации о CXX compiler ABI
-- Извлечение информации о CXX compiler ABI - завершено
-- Определение возможностей компиляции CXX
-- Определение возможностей компиляции CXX - завершено
-- Не удалось найти LLVM FileCheck
-- Найден Git: /usr/bin/git (найденная версия "2.7.4") 
-- версия git: v1.4.0-4c2af078
-- Версия: 1.4.0
-- Выполнение теста HAVE_CXX_FLAG_STD_CXX11
-- Выполнение теста HAVE_CXX_FLAG_STD_CXX11 - Успех
-- Выполнение теста HAVE_CXX_FLAG_WALL
-- Выполнение теста HAVE_CXX_FLAG_WALL - Успех
-- Выполнение теста HAVE_CXX_FLAG_WEXTRA
-- Выполнение теста HAVE_CXX_FLAG_WEXTRA - Успех
-- Выполнение теста HAVE_CXX_FLAG_WSHADOW
-- Выполнение теста HAVE_CXX_FLAG_WSHADOW - Успех
-- Выполнение теста HAVE_CXX_FLAG_WERROR
-- Выполнение теста HAVE_CXX_FLAG_WERROR - Успех
-- Выполнение теста HAVE_CXX_FLAG_PEDANTIC
-- Выполнение теста HAVE_CXX_FLAG_PEDANTIC - Успех
-- Выполнение теста HAVE_CXX_FLAG_PEDANTIC_ERRORS
-- Выполнение теста HAVE_CXX_FLAG_PEDANTIC_ERRORS - Успех
-- Выполнение теста HAVE_CXX_FLAG_WSHORTEN_64_TO_32
-- Выполнение теста HAVE_CXX_FLAG_WSHORTEN_64_TO_32 - Успех
-- Выполнение теста HAVE_CXX_FLAG_WFLOAT_EQUAL
-- Выполнение теста HAVE_CXX_FLAG_WFLOAT_EQUAL - Успех
-- Выполнение теста HAVE_CXX_FLAG_FSTRICT_ALIASING
-- Выполнение теста HAVE_CXX_FLAG_FSTRICT_ALIASING - Успех
-- Выполнение теста HAVE_CXX_FLAG_WNO_DEPRECATED_DECLARATIONS
-- Выполнение теста HAVE_CXX_FLAG_WNO_DEPRECATED_DECLARATIONS - Успех
-- Выполнение теста HAVE_CXX_FLAG_WSTRICT_ALIASING
-- Выполнение теста HAVE_CXX_FLAG_WSTRICT_ALIASING - Успех
-- Выполнение теста HAVE_CXX_FLAG_WD654
-- Выполнение теста HAVE_CXX_FLAG_WD654 - Неудача
-- Выполнение теста HAVE_CXX_FLAG_WTHREAD_SAFETY
-- Выполнение теста HAVE_CXX_FLAG_WTHREAD_SAFETY - Успех
-- Выполнение теста HAVE_THREAD_SAFETY_ATTRIBUTES
-- Выполнение теста HAVE_THREAD_SAFETY_ATTRIBUTES
-- Выполнение теста HAVE_THREAD_SAFETY_ATTRIBUTES -- не удалось скомпилировать
-- Выполнение теста HAVE_CXX_FLAG_COVERAGE
-- Выполнение теста HAVE_CXX_FLAG_COVERAGE - Успех
-- Выполнение теста HAVE_STD_REGEX
-- Выполнение теста HAVE_STD_REGEX
-- Выполнение теста HAVE_STD_REGEX -- успех
-- Выполнение теста HAVE_GNU_POSIX_REGEX
-- Выполнение теста HAVE_GNU_POSIX_REGEX
-- Выполнение теста HAVE_GNU_POSIX_REGEX -- не удалось скомпилировать
-- Выполнение теста HAVE_POSIX_REGEX
-- Выполнение теста HAVE_POSIX_REGEX
-- Выполнение теста HAVE_POSIX_REGEX -- успех
-- Выполнение теста HAVE_STEADY_CLOCK
-- Выполнение теста HAVE_STEADY_CLOCK
-- Выполнение теста HAVE_STEADY_CLOCK -- успех
-- Поиск pthread.h
-- Поиск pthread.h - найден
-- Поиск pthread_create
-- Поиск pthread_create - не найден
-- Поиск pthread_create в pthreads
-- Поиск pthread_create в pthreads - не найден
-- Поиск pthread_create в pthread
-- Поиск pthread_create в pthread - найден
-- Найдены потоки: TRUE  
CMake Ошибка в src/CMakeLists.txt:14 (list):
  list не распознает подкоманду FILTER

-- Выполнение теста BENCHMARK_HAS_O3_FLAG
-- Выполнение теста BENCHMARK_HAS_O3_FLAG - Успех
-- Выполнение теста BENCHMARK_HAS_CXX03_FLAG
-- Выполнение теста BENCHMARK_HAS_CXX03_FLAG - Успех
-- Выполнение теста BENCHMARK_HAS_WNO_ODR
-- Выполнение теста BENCHMARK_HAS_WNO_ODR - Успех
-- Конфигурация неполная, произошли ошибки!
Смотрите также "/home/%%%%%%/benchmark/build/CMakeFiles/CMakeOutput.log".
Смотрите также "/home/%%%%%%/benchmark/build/CMakeFiles/CMakeError.log".

CMakeError.log содержит следующее:

Выполнение C++ SOURCE FILE Теста HAVE_CXX_FLAG_WD654 завершилось неудачей с выводом:
Сменить каталог: /home/%%%%%%/benchmark/build/CMakeFiles/CMakeTmp

Запуск команды сборки:"/usr/bin/make" "cmTC_5b357/fast"
/usr/bin/make -f CMakeFiles/cmTC_5b357.dir/build.make CMakeFiles/cmTC_5b357.dir/build
make[1]: Вход в каталог '/home/%%%%%%/benchmark/build/CMakeFiles/CMakeTmp'
Создание CXX объекта CMakeFiles/cmTC_5b357.dir/src.cxx.o
/usr/bin/c++     -std=c++11  -Wall  -Wextra  -Wshadow  -pedantic  -pedantic-errors  -Wshorten-64-to-32  -Wfloat-equal  -fstrict-aliasing  -Wno-deprecated-declarations  -Wstrict-aliasing -DHAVE_CXX_FLAG_WD654  -wd654   -wd654 -o CMakeFiles/cmTC_5b357.dir/src.cxx.o -c /home/%%%%%%/benchmark/build/CMakeFiles/CMakeTmp/src.cxx
clang: ошибка: неизвестный аргумент: '-wd654'
clang: ошибка: неизвестный аргумент: '-wd654'
CMakeFiles/cmTC_5b357.dir/build.make:65: рецепт для цели 'CMakeFiles/cmTC_5b357.dir/src.cxx.o' завершился неудачей
make[1]: *** [CMakeFiles/cmTC_5b357.dir/src.cxx.o] Ошибка 1
make[1]: Выход из каталога '/home/%%%%%%/benchmark/build/CMakeFiles/CMakeTmp'
Makefile:126: рецепт для цели 'cmTC_5b357/fast' завершился неудачей
make: *** [cmTC_5b357/fast] Ошибка 2

Исходный файл был:
int main() { return 0; }
Определение, существует ли pthread_create, завершилось неудачей с выводом:
Сменить каталог: /home/%%%%%%/benchmark/build/CMakeFiles/CMakeTmp

Запуск команды сборки:"/usr/bin/make" "cmTC_58255/fast"
/usr/bin/make -f CMakeFiles/cmTC_58255.dir/build.make CMakeFiles/cmTC_58255.dir/build
make[1]: Вход в каталог '/home/%%%%%%/benchmark/build/CMakeFiles/CMakeTmp'
Создание C объекта CMakeFiles/cmTC_58255.dir/CheckSymbolExists.c.o
/usr/bin/cc     -o CMakeFiles/cmTC_58255.dir/CheckSymbolExists.c.o   -c /home/%%%%%%/benchmark/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c
Компоновка C исполняемого файла cmTC_58255
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_58255.dir/link.txt --verbose=1
/usr/bin/cc       CMakeFiles/cmTC_58255.dir/CheckSymbolExists.c.o  -o cmTC_58255 -rdynamic 
CMakeFiles/cmTC_58255.dir/CheckSymbolExists.c.o: В функции `main':
CheckSymbolExists.c:(.text+0x16): неопределенная ссылка на `pthread_create'
collect2: ошибка: ld вернул 1 статус выхода
CMakeFiles/cmTC_58255.dir/build.make:97: рецепт для цели 'cmTC_58255' завершился неудачей
make[1]: *** [cmTC_58255] Ошибка 1
make[1]: Выход из каталога '/home/%%%%%%/benchmark/build/CMakeFiles/CMakeTmp'
Makefile:126: рецепт для цели 'cmTC_58255/fast' завершился неудачей
make: *** [cmTC_58255/fast] Ошибка 2

Файл /home/%%%%%%/benchmark/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c:
/* */
#include <pthread.h>

int main(int argc, char** argv)
{
  (void)argv;
#ifndef pthread_create
  return ((int*)(&pthread_create))[argc];
#else
  (void)argc;
  return 0;
#endif
}

Определение, существует ли функция pthread_create в pthreads, завершилось неудачей с выводом:
Сменить каталог: /home/%%%%%%/benchmark/build/CMakeFiles/CMakeTmp

Запуск команды сборки:"/usr/bin/make" "cmTC_3057e/fast"
/usr/bin/make -f CMakeFiles/cmTC_3057e.dir/build.make CMakeFiles/cmTC_3057e.dir/build
make[1]: Вход в каталог '/home/%%%%%%/benchmark/build/CMakeFiles/CMakeTmp'
Создание C объекта CMakeFiles/cmTC_3057e.dir/CheckFunctionExists.c.o
/usr/bin/cc    -DCHECK_FUNCTION_EXISTS=pthread_create   -o CMakeFiles/cmTC_3057e.dir/CheckFunctionExists.c.o   -c /usr/share/cmake-3.5/Modules/CheckFunctionExists.c
Компоновка C исполняемого файла cmTC_3057e
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3057e.dir/link.txt --verbose=1
/usr/bin/cc   -DCHECK_FUNCTION_EXISTS=pthread_create    CMakeFiles/cmTC_3057e.dir/CheckFunctionExists.c.o  -o cmTC_3057e -rdynamic -lpthreads 
/usr/bin/ld: не удается найти -lpthreads
collect2: ошибка: ld вернул 1 статус выхода
CMakeFiles/cmTC_3057e.dir/build.make:97: рецепт для цели 'cmTC_3057e' завершился неудачей
make[1]: *** [cmTC_3057e] Ошибка 1
make[1]: Выход из каталога '/home/%%%%%%/benchmark/build/CMakeFiles/CMakeTmp'
Makefile:126: рецепт для цели 'cmTC_3057e/fast' завершился неудачей
make: *** [cmTC_3057e/fast] Ошибка 2

Я пробовал установку на двух разных машинах и не могу заставить это работать.

Для тех, кто зашел сюда в 2024 году или позже.
Теперь вы можете установить Google benchmark с помощью apt-get

$ sudo apt install libbenchmark-dev
$ sudo apt search libbenchmark-dev
libbenchmark-dev/noble,now 1.8.3-3 amd64 [установлен]
  Библиотека поддержки микробенчмарков, файлы разработки

Ответ или решение

Проблемы с установкой библиотеки Google Benchmark на Ubuntu 16.04.4 LTS

Установка Google Benchmark может вызвать ряд проблем, особенно если у вас возникают ошибки при использовании CMake. Рассмотрим сценарий, описанный ранее, и попробуем решить основные проблемы.

Шаги, предпринятые пользователем

Вы выполнили следующие команды:

  1. Клонирование репозиториев Google Benchmark и Google Test:
    git clone https://github.com/google/benchmark.git
    git clone https://github.com/google/googletest.git
  2. Создание и переход в директорию сборки:
    mkdir build
    cd build
  3. Запуск CMake:
    cmake .. -DCMAKE_BUILD_TYPE=RELEASE

Ошибки, возникающие в процессе сборки

  1. Не найден LLVM FileCheck:

    -- Failed to find LLVM FileCheck

    Это предупреждение может не быть критическим, но указывает на отсутствие утилиты. Убедитесь, что LLVM установлен. Попробуйте установить его:

    sudo apt-get install llvm
  2. Ошибка CMake при обработке списка:

    CMake Error at src/CMakeLists.txt:14 (list):
     list does not recognize sub-command FILTER

    Эта ошибка связана с тем, что CMake не может распознать команду FILTER. Возможно, эта версия CMake устарела. Попробуйте обновить CMake до последней версии:

    sudo apt-get update
    sudo apt-get install cmake
  3. Неизвестные аргументы Clang:

    clang: error: unknown argument: '-wd654'

    Эта ошибка возникает из-за неправильных аргументов компилятору. Убедитесь, что используется правильный компилятор и флаги, или попробуйте использовать GCC вместо Clang. Например:

    export CC=gcc
    export CXX=g++
    cmake .. -DCMAKE_BUILD_TYPE=RELEASE
  4. Проблемы с pthread_create:

    /usr/bin/ld: cannot find -lpthreads

    Это указывает на отсутствие библиотеки pthread. Проверьте, что у вас установлены заголовочные файлы для потоков, если нет, установите:

    sudo apt-get install build-essential

Альтернативный способ установки

Для пользователей, которые сталкиваются с длительными проблемами при установке, начиная с 2024 года, установка Google Benchmark теперь возможна через apt-get. Это наиболее простой и быстрый способ:

sudo apt install libbenchmark-dev

Эта команда упростит процесс, так как она позаботится о зависимости и установке всех необходимых файлов.

Заключение

Установка Google Benchmark на Ubuntu 16.04.4 LTS может быть непростой задачей из-за различных проблем с зависимостями и несовместимостями. Рекомендуется использовать предустановленные пакеты, как это обсуждалось ранее, или обеспечивать актуальность инструментов сборки, таких как CMake и компиляторы. Следуя этим шагам, вы сможете существенно облегчить процес работы с библиотекой Google Benchmark.

Оцените материал
Добавить комментарий

Капча загружается...