如何在Visual Studio 2017中配置NTL库

时间:2017-06-22 09:42:41

标签: static-libraries visual-studio-2017 linker-errors ntl

我刚刚安装了 Visual Studio 2017 ,我想使用 NTL 库。我已按照此处描述的步骤(针对VS2013)。 Compiling NTL library in Visual Studio 2013

正如预期的那样,它编译(有几个,我希望,可以忽略不计的警告)。

然后,在相同的解决方案下,我正在做这些连续的步骤: (在同一解决方案下)

  1. 添加项目 - >新项目 - > Visual C ++ - > Win32控制台应用
  2. 右键单击已创建的项目 - >设置为StartUp Project
  3. 右键单击已创建的项目 - >添加 - >参考 - > NTL
  4. 右键单击已创建的项目 - >配置属性 - > C / C ++ - >一般 - >其他包含目录 - > (NTL包括)
  5. 从“测试”文件夹中取出/复制一些文件(从NTL下载 库)
  6. 删除#include“stdafx.h”
  7. 下的所有内容
  8. 粘贴并构建
  9. 这些步骤应该适用于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

    提前谢谢!

1 个答案:

答案 0 :(得分:1)

首先,我假设你得到相同的 4错误。我得到你在问题中展示的那个,再加上三个。在所有情况下,它都涉及实际存在于代码中的方法或函数的前向声明。

但是,声明中的类型是类,实现中的类型是结构。因此,函数签名不相同,链接器也无法找到实现。

所以,我只是将参数类型的前向声明更新为它们应该是什么:structs。

在lip.h中,将_ntl_general_rem_one_struct更改为struct。 在ZZ_p.h中,将MatPrime_crt_helper更改为struct

我相信这就是我所做的一切。

您不应该对代码进行更改。可能有编译器开关,或者它只在VS中失败。我不知道。我所知道的是它是由比我聪明的人写的,生命太短暂;我已经做出了改变,我继续前进。