我想让ARPACK
库在VS2010
上运行。我想用ARPACK
++提供的C++包装 ++(一些背景 - 我需要得到巨大矩阵的特征值和特征向量)。关于这个问题有一个非常好的教程here。链接到VS2010的ARPACK
继 教程中,我已经成功地汇编mingw
使用g77
的Fortran代码,描述我成功生成 的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文件确实提到所有这些功能 因此我相当确定它们应该可用。不过,我觉得我失去了一些明显的东西。
UPDATE(得到它的工作!):
事实证明,我试图切换 当在配置设置的x86的64位程序链接到32位库,包括产生的DEF文件在配置属性 - >链接器 - >输入 - >附加定义文件,它适用于32位(但我需要64)。对我来说最终的解决方案是在Linux上使用MinGW和gfortran对Win64进行交叉编译。这工作出人意料地好,并产生了一个DLL,我可以从VS中的64位C++应用程序链接。我想我现在应该去写一个关于如何做到这一点的教程:)
问题是从64位程序链接到32位DLL。我确实得到它的工作(见编辑)。感谢您提供gfortran,它运行得非常好,我在使用Windows上生成的dll时完全没有问题。 – Silentbit 2012-07-31 22:08:17
@ user1563071 - 如果你的工作有效,可随时发布自己的问题答案(并在你有能力时接受)。这样,如果他们遇到同样的问题并在谷歌搜索中找到这些答案,其他人将能够看到对您有用的东西(非常显着)。 – mgilson 2012-08-01 01:45:57