首先我尝试使用GMP,因为boost文档说它更快但是boost库中缺少gmp.h文件所以我必须安装GMP库并复制gmp.h.这样做后,我在使用mpz_int时遇到外部符号错误。 所以我决定尝试使用cpp_int,从boost文档复制示例并且它有效。这就是我的尝试:
#include <boost/multiprecision/cpp_int.hpp>
#include <iostream>
int main()
{
using namespace boost::multiprecision;
int128_t v = 1;
// Do some fixed precision arithmetic:
for(unsigned i = 1; i <= 20; ++i)
v *= i;
std::cout << v << std::endl; // prints 20!
// Repeat at arbitrary precision:
cpp_int u = 1;
for(unsigned i = 1; i <= 100; ++i)
u *= i;
std::cout << u << std::endl; // prints 100!
return 0;
}
然后我在Math类中创建了一个阶乘函数,但现在每次使用cpp_int库中的变量时,我都会收到该错误: 错误LNK2019:函数“void __cdecl std :: _ Debug_message(wchar_t const *,wchar_t const *,unsigned int)”中引用了未解析的外部符号__CrtDbgReportW“(?_ Debug_message @std @@ YAXPB_W0I @ Z)
现在,每当我尝试为cpp_int变量分配一个新值时,我都会得到该错误,奇怪的是该示例有效,现在相同的示例对此项目不起作用,但如果我创建一个新项目并且使用相同的升级lib它再次起作用。
答案 0 :(得分:1)
您正在使用的某个库(可能是cpp_int库)可能希望链接到Visual Studio运行时库的 Debug 版本。 (符号__CrtDbgReportW
仅在VS运行时库的调试版本中定义。)
确保编译适当目标(调试/发布)的代码,为正在使用的第三方库编译相同的目标,并链接到相应的运行时库。
编辑(在您之前添加的评论之后):
确保为VC运行时库(又名libcpmtd.lib
)的静态 调试版本编译代码:
在Visual Studio中,打开“项目属性”对话框,然后在Configuration Properties
- &gt;中C/C++
- &gt; Code Generation
,字段Runtime Library
,设置为:Multi-threaded Debug (/MTd)
。
请注意,链接到您的版本的任何其他库都必须具有相同的设置。