2017-06-22 423 views
2

我刚刚安装了Visual Studio 2017并且我想使用NTL库。我遵循了这里描述的步骤(适用于VS2013)。 Compiling NTL library in Visual Studio 2013如何在Visual Studio 2017中配置NTL库

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

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

  1. 添加项目 - >新建项目 - > VISUAL C++ - > Win32控制台申请
  2. 上创建的项目右键 - >设置为启动项目
  3. 右击创建的项目 - >添加 - >参考 - > NTL
  4. 右击创建的项目 - >配置属性 - > Ç/C++ - >常规 - >附加包含目录 - >(NTL包括)
  5. 采取/从文件夹中复制一些文件, “测试”(从NTL 存储库下载)
  6. 删除下面的#include “stdafx.h中” 一切
  7. 粘贴并制造

这些步骤应该当我建立我4接头相关的错误(LNK2019)在VS2013 & VS2015的工作,很遗憾。

他们都是类似于下面的例子:

错误LNK2019解析的外部符号 “无效__cdecl NTL :: MatPrime_crt_helper_deleter(NTL类:: MatPrime_crt_helper *)” (MatPrime_crt_helper_deleter @ NTL @@ YAXPAVMatPrime_crt_helper @ 1个@@ Z) 函数引用 “市民:静态无效__cdecl NTL :: ZZ_pInfoT :: MatPrime_crt_helper_deleter_policy ::缺失者(类 NTL :: MatPrime_crt_helper *)”? (缺失者@ MatPrime_crt_helper_deleter_policy @ ZZ_pInfoT @ NTL @@ SAXPAVMatPrime_crt_helper @ 3 @@ Z)NTLtest < thePathToTheLib> (ZZ_p.obj)1

你能不能指点如何进行?

我试图建立了这个例子 - >ZZ_pEXTest.cpp

预先感谢您!

+0

我刚刚遇到过这个问题,但在VS2015。你找到解决方案吗? –

回答

1

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

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

所以,我简单地更新了参数类型的前向声明,它们应该是:struct。

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

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

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