我刚刚在Linux(Ubuntu)上将Gurobi更新为7.5.1版本 - 这是最新版本。
问题每当我尝试编译使用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语句工作正常,但不知何故它没有正确链接到库?
如果需要更多信息,请与我们联系。另外,如果不清楚,我不太了解编译和链接过程,这可能会阻碍我。
答案 0 :(得分:0)
您需要为您的g ++版本编译libgurobi_c ++。
首先,转到文件夹
None
现在,您需要将已编译的文件复制到lib文件夹:
cd /opt/gurobi751/linux64/src/build/ make
您将编译并运行。