编译和使用适用于Windows的NTL c ++库

时间:2010-04-12 09:59:19

标签: c++ visual-c++ ntl

我已经使用Microsoft Visual Studio 2008编译了用于c ++的NTL inifite精度整数算术库。我按照this site使用Visual Studio界面而不是命令提示符进行了解释。实际上我宁愿在命令提示符下执行此操作,但我不确定如何操作。

无论如何,我编译了库,现在我想在命令提示符下使用库编译程序。我正在尝试编译的程序已在linux系统上进行了测试,我用以下

编译它
c++ -I/appl/htopopt/Linux_x86_64/NTL-5.4.2/include mpqs.cpp main.cpp -o main -L/appl/htopopt/Linux_x86_64/NTL-5.4.2/lib -lntl -L/appl/htopopt/Linux_x86_64/gmp-4.2.1/lib -lgmp -lm

没关系gmp的东西,我没有安装在Windows上。纯粹是一个可选的东西,会使NTL运行得更快。无论如何,这在linux上运行良好。现在在Windows上我写下以下内容

cl /EHsc /I D:\Downloads\WinNTL-5_5_2\include mpqs.cpp main.cpp /link /LIBPATH:"D:\Documents\Visual Studio 2008\Projects\ntl\Debug"

但是这会导致以下错误:

mpqs.cpp
mpqs.cpp(38) : error C2039: 'find_smooth_vals' : is not a member of 'QS'
        d:\desktop\qs\mpqs.h(12) : see declaration of 'QS'
mpqs.cpp(41) : error C2065: 'M' : undeclared identifier
mpqs.cpp(41) : error C2065: 'n' : undeclared identifier
mpqs.cpp(42) : error C2065: 'sieve_table' : undeclared identifier
mpqs.cpp(42) : error C2228: left of '.size' must have class/struct/union
        type is ''unknown-type''
mpqs.cpp(43) : error C2065: 'sieve_table' : undeclared identifier
mpqs.cpp(44) : error C2065: 'qx_table' : undeclared identifier
mpqs.cpp(44) : error C3861: 'test_smoothness': identifier not found
mpqs.cpp(45) : error C2065: 'smooth_indices' : undeclared identifier
mpqs.cpp(45) : error C2228: left of '.push_back' must have class/struct/union
        type is ''unknown-type''
main.cpp
Generating Code...

好像,我的mpqs.h文件没有包含在编译过程中?此外,我不明白为什么它抱怨.push_back()的矢量类型?

非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

肯定会包含mpqs.h,因为输出会要求您引用它。

看起来MPQS.h似乎没有包含在NTL库中......你写了吗?如果是这样,你可以发布代码吗?

另外,你不应该在你的构建中的某处包含库文件吗?

编辑:没有函数find_smooth_values所以为什么你期望MSVC找到它?我不确定为什么在GCC下编译,但它明显缺失。我猜测其他错误是由于这个引起的。错误告诉你事情。你应该听听他们的意见。

push_back失败了,因为它不知道你想要推送的类型是什么。这也可能是由于find_smooth_values不存在而引起的。尝试将函数原型添加到QS类中。这可能很好地解决了你所有的问题。

至于库,在编译成功之前不会使用库。所以现在不用担心。进入并修复MSVC报告的错误!