在Windows上带有Visual Studio的Fortran项目中使用Nlopt库

在Windows上带有Visual Studio的Fortran项目中使用Nlopt库,windows,visual-studio,fortran,nlopt,Windows,Visual Studio,Fortran,Nlopt,我一直在Fortran项目中使用,在Linux系统下运行它没有问题。现在我刚开始在Windows上使用Visual studio编写Fortran程序。但是,我在Windows上使用NLopt库时遇到一些困难。我正在计算机上使用Visual Studio 2013和英特尔并行Studio XE 17 以下是我所做的工作和遇到的问题: 我从其网站下载了NLopt库的Windows版本(64位)。然后,我使用VS的开发人员命令提示符执行lib/def:libnlopt-0.def\MACHINE:x

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

以下是我所做的工作和遇到的问题:

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

  • 我在visualstudio中创建了一个Fortran项目,并使用了在Linux下工作的代码。在VisualStudio中,我将.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
    
  • 然后我按照建议[here]()在命令行中添加了
    /names:lowercase
    ,现在它可以正常编译,但有一个警告:

    libnlopt-0.exp : warning LNK4070: /OUT:libnlopt-0.dll directive in .EXP differs from output filename 'x64\Release\baseline.exe'; ignoring directive
    
  • 虽然它编译得很好,但我仍然无法运行编译后的代码。当我运行它时,我的计算机告诉我,
    此应用程序无法在你的电脑上运行。要查找你电脑的版本,请查看发布的软件
    。然后命令窗口显示
    拒绝访问
    ,然后程序停止


  • 我真的不知道下一步我能做什么来让我的代码工作。我知道有很多人在Windows中使用NLopt。

    我刚刚想出了解决方案。对于上面的第二步,我应该只将“libnlopt-0.lib”而不是“libnlopt-0.exp”放在VisualStudio项目属性的“附加依赖项”中。之后,我将“libnlopt-0.dll”复制到程序的工作目录中。这样我的程序就可以毫无问题地运行了

    你有哪个Windows版本?是64位吗?编译命令看起来如何?我使用的是64位版本的Windows 10。Visuao Studio使用标准编译选项完成编译,但上面提到的
    /names:lowercase
    选项除外。