C++ boost/multiprecision: фатальная ошибка: mpfr.h: нет такого файла или каталога

Я следовал этому ответу и использовал Boost.Multiprecision для использования высокоточных чисел с плавающей запятой ( примеры).

main.cpp

#include <iostream>
#include <boost/multiprecision/mpfr.hpp>  // Defines the Backend type that wraps MPFR

int main(int argc, char** argv)
{
    namespace mp = boost::multiprecision;     // Reduce the typing a bit later...
    typedef mp::number<mp::mpfr_float_backend<300> >  my_float;
    my_float a, b, c; // These variables have 300 decimal digits precision

    return 0;
}

Однако у меня есть серьезная проблема для компиляции этого кода, поскольку я получаю следующую ошибку:

/usr/include/boost/multiprecision/mpfr.hpp:15:18:
              fatal error: mpfr.h: No such file or directory

Даже установка libgmp3-dev и gmplib не работала.

Что случилось?

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.9)
project (main)

# Libraries
set(Boost_USE_STATIC_LIBS OFF) 
set(Boost_USE_MULTITHREADED ON)  
set(Boost_USE_STATIC_RUNTIME OFF) 
find_package(Boost 1.54.0 COMPONENTS filesystem regex system thread date_time wave) 

if(NOT Boost_FOUND)
    message( FATAL_ERROR "Boost 1.54.0 not found." )
endif()
include_directories(SYSTEM ${Boost_INCLUDE_DIR})

# Flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wfatal-errors -std=c++11")


include_directories(${Boost_INCLUDE_DIRS}) 

# pre executable commands


add_executable(main
    main.cpp
)


# Link
target_link_libraries(main ${Boost_LIBRARIES})
target_link_libraries(main ${CMAKE_THREAD_LIBS_INIT})

1 ответ

Решение

Если вы хотите использовать бэкэнд MPFR, вы должны установить его отдельно, убедитесь, что он собран, и убедитесь, что его заголовки находятся в пути INCLUDE вашего компилятора, а его двоичные файлы (библиотеки) находятся в командной строке вашего компоновщика.

(MPFR не является GMP.)

Вы должны включить библиотеки для gmp и mfr в свой файл cmake.

В qmake используйте: LIBS += -lgmp -lmpfr

Если вы не знаете, как в cmake, просто позвольте qmake создать файл cmake, я не использую cmake, но знаю, что он похож, но забыл, как это сделать, или я бы просто сделал это и опубликовал результаты, извините, но обо всем, что я забыл за эти годы, например, куда я положил свои воспоминания; но, как и они, этот пост старый, так что любой найдет его полезным.

Это удовлетворит следующие варианты включения и некоторые другие:

 #include <boost/multiprecision/cpp_dec_float.hpp>
 #include <boost/multiprecision/mpfr.hpp>
 #include <boost/multiprecision/gmp.hpp>
Другие вопросы по тегам