我一直在我的 Fortran 项目中使用NLopt 库,在 Linux 系统下运行它没有问题。现在我刚刚开始在 Windows 上使用 Visual Studio 来编写我的 Fortran 程序。但是,我在 Windows 上使用 NLopt 库时遇到了一些困难。我在我的计算机上使用 Visual Studio 2013 和 Intel Parallel Studio XE 17。
以下是我所做的以及遇到的问题:
我从其网站下载了 NLopt 库的 Windows 版本(64 位)。然后我使用开发人员命令提示符来执行 VS,
lib /def:libnlopt-0.def \MACHINE:x64
并在同一文件夹下创建一个 .lib 和 .exp 文件。我在 Visual Studio 中创建了一个 Fortran 项目,并使用了在 Linux 下运行的代码。在 Visual Studio 中,我将 .lib 和 .exp 的路径添加到项目属性的“附加包含目录”和“附加库目录”中。我还在“附加依赖项”中添加了“libnlopt-0.lib”和“libnlopt-0.exp”。
当我编译项目时,它失败并出现错误:
1>mod_nlopt.obj : error LNK2019: unresolved external symbol NLO_CREATE referenced in function MOD_NLOPT_mp_SUB_NLOPT 1>mod_nlopt.obj : error LNK2019: unresolved external symbol NLO_SET_FTOL_ABS referenced in function MOD_NLOPT_mp_SUB_NLOPT 1>mod_nlopt.obj : error LNK2019: unresolved external symbol NLO_SET_FTOL_REL referenced in function MOD_NLOPT_mp_SUB_NLOPT 1>mod_nlopt.obj : error LNK2019: unresolved external symbol NLO_SET_XTOL_ABS referenced in function MOD_NLOPT_mp_SUB_NLOPT 1>mod_nlopt.obj : error LNK2019: unresolved external symbol NLO_SET_XTOL_REL referenced in function MOD_NLOPT_mp_SUB_NLOPT 1>mod_nlopt.obj : error LNK2019: unresolved external symbol NLO_SET_LOWER_BOUNDS referenced in function MOD_NLOPT_mp_SUB_NLOPT 1>mod_nlopt.obj : error LNK2019: unresolved external symbol NLO_SET_UPPER_BOUNDS referenced in function MOD_NLOPT_mp_SUB_NLOPT 1>mod_nlopt.obj : error LNK2019: unresolved external symbol NLO_SET_MAX_OBJECTIVE referenced in function MOD_NLOPT_mp_SUB_NLOPT 1>mod_nlopt.obj : error LNK2019: unresolved external symbol NLO_ADD_INEQUALITY_CONSTRAINT referenced in function MOD_NLOPT_mp_SUB_NLOPT 1>mod_nlopt.obj : error LNK2019: unresolved external symbol NLO_OPTIMIZE referenced in function MOD_NLOPT_mp_SUB_NLOPT 1>mod_nlopt.obj : error LNK2019: unresolved external symbol NLO_DESTROY referenced in function MOD_NLOPT_mp_SUB_NLOPT
然后我按照[这里](http://nlopt-discuss.ab-initio.mit.narkive.com/M3vzZMYA/nlopt-linked-to-intel-fortran-compiler-for-windows)的建议并添加
/names:lowercase
到命令中行,现在它编译得很好,但有一个警告:libnlopt-0.exp : warning LNK4070: /OUT:libnlopt-0.dll directive in .EXP differs from output filename 'x64\Release\baseline.exe'; ignoring directive
虽然它编译得很好,但我仍然无法运行我编译的代码。当我运行它时,我的电脑告诉我
This APP cannot run on your PC. To find a version for your PC, check with the software published
. 然后显示命令窗口Access denied
,然后程序停止。
我真的不知道接下来我该怎么做才能使我的代码正常工作。我知道有很多人在 Windows 中使用 NLopt。