Использование библиотеки Nlopt в проекте Fortran с Visual Studio в Windows

Я использовал библиотеку NLopt в мои проекты на Фортране, и у меня нет проблем с его запуском в системе Linux. Теперь я только начал использовать Visual Studio в Windows для написания своих программ на Фортране. Однако у меня возникли некоторые трудности с использованием библиотеки NLopt в Windows. Я использую Visual Studio 2013 и Intel Parallel Studio XE 17 на своем компьютере.

Вот что я сделал и проблемы, с которыми я столкнулся:

  1. Я скачал версию библиотеки NLopt для Windows (64-разрядную) с ее веб-сайта. Затем я использую командную строку разработчика для VS, чтобы выполнить lib /def:libnlopt-0.def \MACHINE:x64, и он создает файлы .lib и .exp в той же папке.

  2. Я создал проект Fortran в Visual Studio и использую код, который работал под 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, после чего программа останавливается.

Я действительно не знаю, что я могу сделать дальше, чтобы мой код заработал. Я знаю, что многие люди используют NLopt в Windows.


person shanmu .S    schedule 08.04.2017    source источник
comment
Какая у вас версия Windows? Он 64-битный? Как выглядят ваши команды компиляции?   -  person Vladimir F    schedule 09.04.2017
comment
Я использую 64-битную версию Windows 10. Компиляция выполняется Visuao Studio с использованием стандартных параметров компиляции, за исключением параметра /names:lowercase, упомянутого выше.   -  person shanmu .S    schedule 09.04.2017


Ответы (1)


Я только что понял решение. Для второго шага выше я должен указать только «libnlopt-0.lib», но не «libnlopt-0.exp» в «Дополнительные зависимости» в свойстве проекта Visual Studio. После этого я скопировал "libnlopt-0.dll" в рабочий каталог моей программы. Тогда моя программа может работать без проблем!

person shanmu .S    schedule 11.04.2017