我需要具有任意精度的计算,因此我决定使用 Boost Multiprecision。我下载了 Boost 1.77 并尝试使用 mingw 编译这个程序:
#include <iostream>
#include <boost/multiprecision/cpp_bin_float.hpp>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
这个程序没有编译。编译器报错:
C:\include\boost\math\special_functions\detail\bernoulli_details.hpp|559|错误:命名空间'std'中的'mutex'没有命名类型| C:\include\boost\math\special_functions\detail\bernoulli_details.hpp|21|注意:'std::mutex' 定义在头文件''中;你忘了'#include mutex'吗?
等等。看着 bernoulli_details.hpp 我看到了这个:
#ifdef BOOST_HAS_THREADS
std::mutex m_mutex;
atomic_counter_type m_counter, m_current_precision;
#else
int m_counter;
int m_current_precision;
#endif // BOOST_HAS_THREADS
有点惊讶的是,理论上应该计算伯努利数的文件说这个,我决定我需要找到配置文件并删除#define BOOST_HAS_THREADS. 我不需要多线程。顺便说一句,我也不需要伯努利数。正如您可能猜到的那样,我失败了……BOOST_HAS_THREADS定义了 18 个文件。其中一些是平台配置文件,其余的是来自各种 Boost 数学库的文件,其中该宏被无条件地重新定义。修改所有这些文件可能不值得,而且没有任何意义。我再次感到惊讶,我想问:是否有可能以某种方式在 mingw 中编译我的程序,还是放弃这个想法并使用 Visual Studio 更好?理想情况下,我想以某种方式禁用多线程,因为对此有一个宏并且它在 mingw 中被破坏了。