2

我刚刚安装了Visual Studio 2017,我想使用NTL库。我已按照此处描述的步骤进行操作(对于 VS2013)。在 Visual Studio 2013 中编译 NTL 库

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

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

  1. 添加项目 -> 新建项目 -> Visual C++ -> Win32 控制台应用程序。
  2. 右键单击创建的项目 -> 设置为启动项目
  3. 右键单击创建的项目 -> 添加 -> 引用 -> NTL
  4. 右键单击创建的项目 -> 配置属性 -> C/C++ -> 常规 -> 附加包含目录 -> (NTL 包含)
  5. 从文件夹“tests”中获取/复制一些文件(从 NTL 存储库下载)
  6. 删除 #include "stdafx.h" 下面的所有内容
  7. 粘贴并构建

这些步骤应该适用于 VS2013 和 VS2015,不幸的是,当我构建时,我遇到了 4 个与链接器相关的错误(LNK2019)。

它们都类似于下面的示例:

函数“public: static void __cdecl NTL::ZZ_pInfoT:: MatPrime_crt_helper_deleter_policy::deleter(class 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

先感谢您!

4

1 回答 1

1

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

但是,声明中的类型是类,实现中的类型是结构。因此,函数签名不一样,链接器找不到实现。

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

在 lip.h 中,更改_ntl_general_rem_one_structstruct. 在 ZZ_p.h 中,更改MatPrime_crt_helperstruct.

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

您实际上不必对代码进行更改。可能有一个编译器开关,或者它只在 VS 中失败。我不知道。我只知道它是由比我聪明得多的人写的,而且生命太短暂了;我已经做出了改变,我正在继续前进。

于 2017-07-12T14:42:07.990 回答