我正在尝试让ARPACK
库在VS2010
.
我想使用 ++ 提供的 C++ 包装器ARPACK
(一些背景 - 我需要获取巨大矩阵的特征值和特征向量)。这里有一个很好的关于这个主题的教程。
按照教程,我设法使用g77
on编译了 fortran 代码mingw
,我成功地生成了所描述的 dll 和 lib。尝试将我的 Visual Studio 项目链接到库时出现问题。
我试图链接的方式如下:
- 我制作了一个简单的 VS2010 C++ 控制台应用程序
- 我已将包含 ARPACK++ 库的文件夹添加到我的“其他包含文件夹”中
- 我已将 lib 文件添加到“其他依赖项”
- 我已将包含 lib 文件的目录添加到我的“其他库目录”中
尽管有这些设置,当我尝试编译这个简短的测试代码时:
#include "stdafx.h"
#include "arrsnsym.h"
int _tmain(int argc, _TCHAR* argv[])
{
ARrcNonSymStdEig<float> prob(100, 4L);
printf("Bok!");
return 0;
}
我收到一条错误消息:
>arpackcpp.obj : error LNK2001: unresolved external symbol scopy_
1>arpackcpp.obj : error LNK2001: unresolved external symbol snaupd_
1>arpackcpp.obj : error LNK2001: unresolved external symbol sneupd_
我不明白为什么链接器找不到上述方法。检查 dllwrap 实用程序生成的 .def 文件确实提到了所有这些功能,所以我相当确定它们应该可用。不过,我觉得我错过了一些明显的东西。
更新(让它工作!):
事实证明,当在配置设置中切换到 x86 并在配置属性-> 链接器-> 输入-> 附加定义文件中包含生成的 def 文件时,我试图将 64 位程序链接到 32 位库,它起作用了对于 32 位(但我需要 64 位)。对我有用的最终解决方案是在 Linux 上使用 MinGW 和 gfortran 为 Win64 交叉编译它。效果出奇的好,并生成了一个 dll,我可以从 VS 中的 64 位 C++ 应用程序链接到该 dll。我想我现在应该去写一个关于如何做到这一点的教程:)