0

我一直在我的 Fortran 项目中使用NLopt 库,在 Linux 系统下运行它没有问题。现在我刚刚开始在 Windows 上使用 Visual Studio 来编写我的 Fortran 程序。但是,我在 Windows 上使用 NLopt 库时遇到了一些困难。我在我的计算机上使用 Visual Studio 2013 和 Intel Parallel Studio XE 17。

以下是我所做的以及遇到的问题:

  1. 我从其网站下载了 NLopt 库的 Windows 版本(64 位)。然后我使用开发人员命令提示符来执行 VS,lib /def:libnlopt-0.def \MACHINE:x64并在同一文件夹下创建一个 .lib 和 .exp 文件。

  2. 我在 Visual Studio 中创建了一个 Fortran 项目,并使用了在 Linux 下运行的代码。在 Visual Studio 中,我将 .lib 和 .exp 的路径添加到项目属性的“附加包含目录”和“附加库目录”中。我还在“附加依赖项”中添加了“libnlopt-0.lib”和“libnlopt-0.exp”。

  3. 当我编译项目时,它失败并出现错误:

    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
    
  4. 然后我按照[这里](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
    
  5. 虽然它编译得很好,但我仍然无法运行我编译的代码。当我运行它时,我的电脑告诉我This APP cannot run on your PC. To find a version for your PC, check with the software published. 然后显示命令窗口Access denied,然后程序停止。

我真的不知道接下来我该怎么做才能使我的代码正常工作。我知道有很多人在 Windows 中使用 NLopt。

4

1 回答 1

0

我刚刚想出了解决方案。对于上面的第二步,我应该只将“libnlopt-0.lib”而不是“libnlopt-0.exp”放入 Visual Studio 项目属性中的“Additional Dependencies”。之后,我将“libnlopt-0.dll”复制到我的程序的工作目录中。然后我的程序可以毫无问题地运行!

于 2017-04-11T04:08:18.303 回答