C++ boost/multiprecision: fatal error: mpfr.h: No such file or directory
C++ boost/multiprecision: fatal error: mpfr.h: No such file or directory
我已关注 this answer and used Boost.Multiprecision to use high accuracy floating point numbers (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-dev and 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})
如果你想使用 MPFR 后端,你必须单独安装它,确保它是构建的,并确保它的头文件在你的编译器的 INCLUDE 路径中并且它的二进制文件(库)是在链接器的命令行中。
(MPFR 不是 GMP。)
您必须在 cmake 文件中包含 gmp 和 mfr 的库。
在 qmake 中使用:LIBS += -lgmp -lmpfr
如果你不会cmake怎么用,就让qmake做一个cmake文件吧,我没用cmake,但是我知道是类似的,但是忘记怎么做了,要不我就直接做了post 结果,抱歉,但多年来我忘记了所有事情,比如我把记忆放在哪里;但和他们一样,这个 post 已经过时了,所以任何发现它的人都会觉得这很有帮助。
这将满足以下内容,以及更多内容:
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/multiprecision/mpfr.hpp>
#include <boost/multiprecision/gmp.hpp>
我已关注 this answer and used Boost.Multiprecision to use high accuracy floating point numbers (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-dev and 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})
如果你想使用 MPFR 后端,你必须单独安装它,确保它是构建的,并确保它的头文件在你的编译器的 INCLUDE 路径中并且它的二进制文件(库)是在链接器的命令行中。
(MPFR 不是 GMP。)
您必须在 cmake 文件中包含 gmp 和 mfr 的库。
在 qmake 中使用:LIBS += -lgmp -lmpfr
如果你不会cmake怎么用,就让qmake做一个cmake文件吧,我没用cmake,但是我知道是类似的,但是忘记怎么做了,要不我就直接做了post 结果,抱歉,但多年来我忘记了所有事情,比如我把记忆放在哪里;但和他们一样,这个 post 已经过时了,所以任何发现它的人都会觉得这很有帮助。
这将满足以下内容,以及更多内容:
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/multiprecision/mpfr.hpp>
#include <boost/multiprecision/gmp.hpp>