我刚刚安装了Visual Studio 2017,我想使用NTL库。我已经按照此处描述的步骤(对于VS2013)。在 Visual Studio 2013 中编译 NTL 库
正如预期的那样,它编译(我希望有几个可以忽略不计的警告)。
然后,在相同的解决方案下,我正在执行以下连续步骤: (在同一解决方案下)
添加项目 ->- 新建项目 -> Visual C++ -> Win32 控制台应用程序。
- 右键单击已创建的项目 ->设置为启动项目
- 右键单击创建的项目 -> 添加 -> 引用 -> NTL
- 右键单击创建的项目 -> 配置属性 ->C/C++ -> 常规 -> 其他包含目录 ->(NTL 包含) 从
- 文件夹"tests"中获取/复制一些文件(从NTL下载) 存储库)
- 删除"stdafx.h"#include 的所有内容
- 粘贴和构建
这些步骤应该适用于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) 在函数"公共:静态空隙__cdecl"中引用 NTL::ZZ_pInfoT::MatPrime_crt_helper_deleter_policy::d eleter(class NTL::MatPrime_crt_helper *)" (?deleter@MatPrime_crt_helper_deleter_policy@ZZ_pInfoT@NTL@@SAXPAVMatPrime_crt_helper@3@@Z) NTLtest <<strong>thePathToTheLib>(ZZ_p.obj) 1
你能建议如何进行吗?
我试图构建此示例 ->ZZ_pEXTest.cpp
提前谢谢你!
首先,我假设你得到和我一样的 4 个错误。我得到了你在问题中展示的那个,再加上三个。在所有情况下,它都涉及代码中实际存在的方法或函数的前向声明。
但是,声明中的类型是类,实现中的类型是结构。因此,函数签名不同,链接器找不到实现。
因此,我只是将参数类型的前向声明更新为它们应该的样子:结构。
在lip.h中,将_ntl_general_rem_one_struct
更改为struct
。 在 ZZ_p.h 中,将MatPrime_crt_helper
更改为struct
。
我相信这就是我所做的一切。
您实际上不必对代码进行更改。可能存在编译器开关,或者仅在 VS 中失败。我不知道。我只知道它是比我聪明得多的人写的,生命太短暂了;我已经做出了改变,我正在继续前进。