Вопрос или проблема
У меня проблемы с установкой 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. Рассмотрим сценарий, описанный ранее, и попробуем решить основные проблемы.
Шаги, предпринятые пользователем
Вы выполнили следующие команды:
- Клонирование репозиториев Google Benchmark и Google Test:
git clone https://github.com/google/benchmark.git git clone https://github.com/google/googletest.git
- Создание и переход в директорию сборки:
mkdir build cd build
- Запуск CMake:
cmake .. -DCMAKE_BUILD_TYPE=RELEASE
Ошибки, возникающие в процессе сборки
-
Не найден LLVM FileCheck:
-- Failed to find LLVM FileCheck
Это предупреждение может не быть критическим, но указывает на отсутствие утилиты. Убедитесь, что LLVM установлен. Попробуйте установить его:
sudo apt-get install llvm
-
Ошибка 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
-
Неизвестные аргументы Clang:
clang: error: unknown argument: '-wd654'
Эта ошибка возникает из-за неправильных аргументов компилятору. Убедитесь, что используется правильный компилятор и флаги, или попробуйте использовать GCC вместо Clang. Например:
export CC=gcc export CXX=g++ cmake .. -DCMAKE_BUILD_TYPE=RELEASE
-
Проблемы с
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.