我刚刚安装了 Visual Studio 2017 ,我想使用 NTL 库。我已按照此处描述的步骤(针对VS2013)。 Compiling NTL library in Visual Studio 2013
正如预期的那样,它编译(有几个,我希望,可以忽略不计的警告)。
然后,在相同的解决方案下,我正在做这些连续的步骤: (在同一解决方案下)
这些步骤应该适用于VS2013& VS2015,遗憾的是,当我构建时,我遇到了4个与链接器相关的错误( LNK2019 )。
它们都与下面的例子类似:
错误LNK2019未解析的外部符号“void __cdecl NTL :: MatPrime_crt_helper_deleter(类NTL :: MatPrime_crt_helper *)“ (?MatPrime_crt_helper_deleter @ @@ NTL @ YAXPAVMatPrime_crt_helper 1个@@ Z) 函数“public:static void __cdecl”中引用 NTL :: ZZ_pInfoT :: MatPrime_crt_helper_deleter_policy ::缺失者(类 NTL :: MatPrime_crt_helper *)“ (?deleter @ MatPrime_crt_helper_deleter_policy @ ZZ_pInfoT @ NTL @@ SAXPAVMatPrime_crt_helper @ 3 @@ Z)NTLtest< thePathToTheLib > (ZZ_p.obj)1
您能建议如何继续吗?
我试图建立这个例子 - >的 ZZ_pEXTest.cpp
提前谢谢!
答案 0 :(得分:1)
首先,我假设你得到相同的 4错误。我得到你在问题中展示的那个,再加上三个。在所有情况下,它都涉及实际存在于代码中的方法或函数的前向声明。
但是,声明中的类型是类,实现中的类型是结构。因此,函数签名不相同,链接器也无法找到实现。
所以,我只是将参数类型的前向声明更新为它们应该是什么:structs。
在lip.h中,将_ntl_general_rem_one_struct
更改为struct
。
在ZZ_p.h中,将MatPrime_crt_helper
更改为struct
。
我相信这就是我所做的一切。
您不应该对代码进行更改。可能有编译器开关,或者它只在VS中失败。我不知道。我所知道的是它是由比我聪明的人写的,生命太短暂;我已经做出了改变,我继续前进。