2017-09-03 1 views
1

J'ai suivi this answer et utilisé Boost.Multiprecision pour utiliser des nombres à virgule flottante de haute précision (examples).C++ boost/multiprecision: erreur fatale: mpfr.h: Aucun fichier ou répertoire

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; 
} 

Cependant, j'ai un problème sérieux pour la compilation de ce code que je reçois l'erreur suivante:

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

installation Même libgmp3-dev et gmplib ne fonctionne pas.

Qu'est-ce qui ne va pas?

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

Si vous voulez utiliser le [MPFR] (http://www.mpfr.org/) back-end, vous devez l'installer séparément, et assurez-vous qu'il est dans vos compilateurs INCLUDE chemin. (MPFR n'est pas GMP.) – davidbak

+0

@davidbak, Il compile. Merci beaucoup. Juste il y a un échec sur le lien. 'CMakeFiles/main.dir/main.cpp.o: En fonction boost :: multiprécision :: :: backends détail :: gmp_float_imp <40u> :: ~ gmp_float_imp() '. main.cpp :(text._ZN5boost14multiprecision8backends6detail13gmp_float_impILj40EED2Ev [_ZN5boost14multiprecision8backends6detail13gmp_float_impILj40EED5Ev] + 0x21): référence non définie à __gmpf_clear'' – ar2015

+0

Donc maintenant assurez-vous que vous avez _built_ MPFR suivant leurs instructions et le fichier de bibliothèque résultant est dans votre _linker_ chemin (ou sur la ligne de commande de l'éditeur de liens) ... (La bibliothèque que je suis parler est un '.o' ou peut-être' .so'.) – davidbak

Répondre

0

Si vous voulez utiliser le back-end MPFR vous devez l'installer séparément, assurez-vous qu'il est construit, et assurez-vous que les en-têtes sont dans le chemin INCLUDE de votre compilateur et son Les binaires (bibliothèques) sont dans la ligne de commande de votre éditeur de liens.

(MPFR est pas GMP.)