C ++ boost / multiprecision:致命错误:mpfr.h:没有这样的文件或目录

时间:2017-09-03 02:06:30

标签: c++ boost cmake boost-multiprecision

我已关注this answer并使用Boost.Multiprecision来使用高精度浮点数(examples)。

的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-devgmplib也无效。

有什么问题?

的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})

2 个答案:

答案 0 :(得分:0)

如果您想使用MPFR后端,您必须单独安装它,确保它已构建,并确保其标头位于编译器的INCLUDE路径及其二进制文件中(库)位于链接器的命令行中。

(MPFR不是GMP。)

答案 1 :(得分:0)

您必须在cmake文件中同时包含gmp和mfr的库。

在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>