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