использование lp_solve с Visual Studio 2015

Я довольно новичок в C ++. Я пытаюсь использовать VS2015 и библиотеку lp_solve (https://sourceforge.net/projects/lpsolve/files/lpsolve/5.5.2.5/), чтобы решить мою проблему линейного эквалайзера (для точного расстояния Громова-Хаусдорфа, см. https://mediatum.ub.tum.de/doc/1231885/1231885.pdf раздел 3.1 и 3.3). Моя машина — система x64. Вот что я сделал:

  • не загружайте пакет lp_solve_5.5.2.5_dev_win64.zip и распакуйте его.
  • конкретная библиотека директой (через проект -> свойства -> компоновщик)
  • конкретная библиотека, которую я использовал (liblpsolve55.lib и liblpsolve55d.lib для статической компоновки) через project-> properties-> linker-> input-> дополнительная зависимость.
  • объявить каталог файлов .h (через project-> properties-> C / C ++).
  • Вот что я заявляю в своем коде:

    #include "lp_lib.h"

    #pragma comment(lib, "liblpsolve55.lib") // static

    #pragma comment(lib, "liblpsolve55d.lib") // static for debug

Хотя, когда я запускаю код с x86, он покажет следующие проблемы:

  • ошибка LNK2019: неразрешенный внешний символ _make_lp @ 8, указанный в функции «void __cdecl my_solve [всего 13 таких ошибок]
  • предупреждение LNK4272: библиотечный тип машины «X86» конфликтует с целевым типом машины «x64» [всего 2 предупреждения, подобные этим]

Хотя, когда я переключаю бегун с x64:

  • Я получил 550 ошибок, в основном из-за «dlfcn.h»: нет такого файла или каталога
  • в файле lp_lib.h он содержит строки:

    #if (LoadInverseLib == TRUE) || (LoadLanguageLib == TRUE)
    #ifdef WIN32
    #include <windows.h>
    #else
    #include <dlfcn.h>
    #endif
    #endif
    
  • что означает, что он рассматривает меня как машину linux, так как dlfcn.h для unix / linux

Я также пытаюсь использовать пакет 32-битной версии (lp_solve_5.5.2.5_dev_win32.zip), но он также не работает.

  • с бегуном x86: __iob, _printf выдает.
  • с x64 runner: «dlfcn.h»: нет такого файла или каталога

Я последовательно собираю и запускаю демонстрацию на моем Mac с соответствующим пакетом (lp_solve_5.5.2.5_dev_osx32.tar.gz). Но я все еще хочу знать, как собрать и запустить его в VS2015.

Здесь я скажу, что я делаю в Mac, если кому-то это нужно (используя Xcode).

  • скачайте пакет lp_solve_5.5.2.5_dev_osx32.tar.gz
  • добавить все .h файл в фазе сборки -> заголовки
  • добавить файл liblpsolve55.a на этапе сборки -> связать двоичный файл с библиотеками
  • (если вы хотите использовать .dylib в качестве динамического связывания, добавьте его на этапе сборки -> скопировать файл, но у меня это не работает)
  • в настройке сборки, установите архитектуры до 32-битной Intel
  • в настройке сборки, установите Создавать только активную архитектуру нет

Спасибо большое, на самом деле никто не отвечает на этот вопрос 🙂 Но я сам решил проблему. Вот что я делаю для VS2015:

  • используйте пакет lp_solve_5.5.2.5_dev_win32.zip

  • добавьте .h файл и .lib, как указано выше

  • измените библиотеку запуска через свойства -> C / C ++ -> генерация кода -> библиотека запуска -> измените DLL (/ MDd) на (/ MTd)

  • если у вас все еще есть проблемы с fprintf, перейдите в свойства -> компоновщик -> ввод -> дополнительные зависимости и добавьте: legacy_stdio_definitions.lib

Это будет хорошо. Это может быть какой-то проблемой перевода, да, я использую китайскую версию VS …

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]