Я только что обновил Gurobi до версии 7.5.1 для Linux (Ubuntu) — это самая новая доступная версия.
проблема Каждый раз, когда я пытаюсь скомпилировать любой код, который использует Gurobi — например, примеры, включенные в /opt/gurobi751/linux64/examples
Я просто получаю строку с неопределенными ссылочными ошибками (например undefined reference to GRBModel::set(...)
). Я считаю, что проблема будет решена, если я могу пойти в каталог /opt/gurobi751/linux64/examples/build
и запустить команду make run_diet_c++
и пусть он скомпилируется и запустится.
Попытки исправить
(1) Я установил $GUROBI_HOME
в моем .bashrc
файл — он указывает на правильный каталог. $LD_LIBRARY_PATH
а также $PATH
были также обновлены. Все они указывают на правильные каталоги.
(2) У меня есть действующая лицензия Gurobi. Если я напишу .lp
файл и запустить его как gurobi_cl model.lp
работает правильно. Бег gurobi_cl --version
дает ожидаемый результат (то есть версия 7.5.1).
(3) Если я попытаюсь скомпилировать версию C (с make run_diet_c
) все работает как положено.
Дополнительная информация
Я создал следующий тестовый файл в моем домашнем каталоге:
#include <stdio.h>
#include "gurobi_c++.h"
int main(int argc, char **argv)
{
GRBVar x;
std::cout << "Hello, world!" << std::endl;
return 0;
}
Затем я компилирую с помощью g ++ с помощью следующей команды:
g++ -Wall test.cpp -o executable -I/opt/gurobi751/linux64/include -L/opt/gurobi751/linux64/lib -lgurobi_c++ -lgurobi75
Это компилируется и работает без жалоб. Тем не менее, я попробовал этот пример:
#include <stdio.h>
#include "gurobi_c++.h"
int main(int argc, char **argv)
{
GRBEnv* env = 0;
try {
env = new GRBEnv();
GRBModel model = GRBModel(*env);
model.addVar(0, 1.0, 1.0, GRB_CONTINUOUS, "TheVar");
model.update();
model.optimize();
} catch (...) {
std::cout << "Exception during optimization" << std::endl;
}
delete env;
return 0;
}
и скомпилировал его с помощью той же команды, и это не удалось. Так что кажется, что оператор include работает нормально, но почему-то он неправильно связывается с библиотекой?
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Также, если неясно, я не очень разбираюсь в процессе компиляции и компоновки, что, вероятно, мешает мне здесь.
Вам нужно скомпилировать libgurobi_c ++ для вашей версии g ++.
Сначала зайдите в папку
cd /opt/gurobi751/linux64/src/build/ make
Теперь вам нужно скопировать скомпилированный файл в папку lib:
cp libgurobi_c++.a ../../lib/
Вы скомпилируете и запустите.
Других решений пока нет …