WedX - журнал о программировании и компьютерных науках

std::isnan не был объявлен с g++-5

Я пытаюсь скомпилировать свою программу с помощью nvcc и g++-5 и получаю эту ошибку.

In file included from /usr/include/glm/detail/func_common.hpp:426:0,
             from /usr/include/glm/detail/func_geometric.inl:5,
             from /usr/include/glm/detail/func_geometric.hpp:113,
             from /usr/include/glm/geometric.hpp:6,
             from /usr/include/glm/detail/func_matrix.inl:4,
             from /usr/include/glm/detail/func_matrix.hpp:149,
             from /usr/include/glm/detail/type_mat2x2.inl:4,
             from /usr/include/glm/detail/type_mat2x2.hpp:182,
             from /usr/include/glm/mat2x2.hpp:6,
             from /usr/include/glm/glm.hpp:71,
             from src/controls.cpp:6:
/usr/include/glm/detail/func_common.inl:623:14: error: ‘std::isnan’   has not been declared
   using std::isnan;
          ^
/usr/include/glm/detail/func_common.inl:659:14: error: ‘std::isinf’ has not been declared
   using std::isinf;

При использовании g++ он компилируется правильно, но для nvcc требуется g++-5. Кто-нибудь знает, как это решить? Кстати, это начало происходить после того, как я запустил sudo do-release-upgrade на Ubuntu.

nvcc --version вывод таков:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
set(CMAKE_C_COMPILER /usr/bin/gcc-5 CACHE PATH "" FORCE)
set(CMAKE_CXX_COMPILER /usr/bin/gcc-5 CACHE PATH "" FORCE)
project(cpu_pcd C CXX CUDA)

add_compile_options(-std=c++11)

file(GLOB SRC src/*.cpp src/*.hpp)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)
find_package(GLEW REQUIRED)
find_package(CUDA REQUIRED)

include_directories(src/)
include_directories(${OPENGL_INCLUDE_DIRS})
include_directories(${GLFW_INCLUDE_DIRS})
include_directories(${CUDA_INCLUDE_DIRS})

cuda_add_library(kernel src/update_particles.cu)
cuda_add_executable(cpu_pcd ${SRC})

set_target_properties(cpu_pcd
  PROPERTIES CUDA_SEPARABLE_COMPILATION on)

target_link_libraries(cpu_pcd kernel)
target_link_libraries(cpu_pcd ${OPENGL_LIBRARIES} glfw  ${GLEW_LIBRARIES} ${CUDA_LIBRARIES} pthread)
13:22:03_CST_2017 Cuda compilation tools, release 8.0, V8.0.61

g++-5 --version вывод таков:

g++-5 (Ubuntu 5.5.0-1ubuntu1) 5.4.1 20171010
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

g++ --version вывод такой:

g++ (Ubuntu 7.2.0-8ubuntu3) 7.2.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Я компилирую с С++ 11, и cmath не включен в мои исходные файлы. Это мой CMakeLists.txt.

cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
set(CMAKE_C_COMPILER /usr/bin/gcc-5 CACHE PATH "" FORCE)
set(CMAKE_CXX_COMPILER /usr/bin/gcc-5 CACHE PATH "" FORCE)
project(cpu_pcd C CXX CUDA)

add_compile_options(-std=c++11)

file(GLOB SRC src/*.cpp src/*.hpp)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)
find_package(GLEW REQUIRED)
find_package(CUDA REQUIRED)

include_directories(src/)
include_directories(${OPENGL_INCLUDE_DIRS})
include_directories(${GLFW_INCLUDE_DIRS})
include_directories(${CUDA_INCLUDE_DIRS})

cuda_add_library(kernel src/update_particles.cu)
cuda_add_executable(cpu_pcd ${SRC})

set_target_properties(cpu_pcd
  PROPERTIES CUDA_SEPARABLE_COMPILATION on)

target_link_libraries(cpu_pcd kernel)
target_link_libraries(cpu_pcd ${OPENGL_LIBRARIES} glfw  ${GLEW_LIBRARIES} ${CUDA_LIBRARIES} pthread)
30.11.2017

Ответы:


1

Вам нужно сделать nvcc для запуска хост-компилятора C++ в режиме C++11 (недостаточно напрямую передать эту опцию в gcc):

 nvcc -Xcompiler "-std=c++11"

подробности можно найти здесь

Связанная информация:

версия c++, поддерживаемая cuda 5.0

Ошибка при использовании CUDA и C++11

30.11.2017
  • Я так пробовал, не работает. Также пробовал это nvcc -std=c++11 src/*.cpp -o main -lpthread -lGL -lGLEW. 30.11.2017
  • Включите подробный режим в cmake, чтобы проверить, какие параметры передаются в nvcc. 30.11.2017
  • Вы также можете включить подробный режим для самого nvcc, чтобы проверить, как он вызывает g++. 30.11.2017
  • Похоже, он не компилируется перед вызовом nvcc. Команда, вызываемая перед появлением ошибки, — /usr/bin/g++-5 -DGLFW_DLL -I/home/dev/work/octree-cpu-pcd/src -std=c++11 -o CMakeFiles/cpu_pcd.dir/src/controls.cpp.o -c /home/dev/work/octree-cpu-pcd/src/controls.cpp 30.11.2017
  • Проверьте версию /usr/bin/gcc-5 и попробуйте напрямую скомпилировать простую программу с std::isnan. Вам нужно исправить это, и это не связано с nvcc и CUDA. 30.11.2017
  • Кстати, изменил его для компиляции с помощью g++-5. 30.11.2017
  • хорошо, с g++ он компилируется правильно. Но nvcc поддерживает только g++-5, есть предложения? 30.11.2017
  • любое предложение? исправить g++-5 30.11.2017

  • 2

    std::isnan и std::isinf объявлены в <cmath>, начиная с C++11. Этот заголовок включен? Выполняется ли компиляция в режиме С++ 11 или более поздней версии?

    30.11.2017

    3

    Для тех, кто заинтересован, я решил изменить две строки CMakeLists.txt следующим образом:

    set(CMAKE_C_COMPILER /usr/bin/gcc-5 CACHE PATH "" FORCE)
    set(CMAKE_CXX_COMPILER /usr/bin/g++ CACHE PATH "" FORCE)
    

    Теперь компилируется правильно, спасибо всем желающим помочь.

    30.11.2017
  • Я использую gcc4.9, где я могу найти этот файл? 09.04.2018
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]