无法在7.5.1版中编译Gurobi示例

时间:2017-10-16 22:14:16

标签: c++ gurobi

我刚刚在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语句工作正常,但不知何故它没有正确链接到库?

如果需要更多信息,请与我们联系。另外,如果不清楚,我不太了解编译和链接过程,这可能会阻碍我。

1 个答案:

答案 0 :(得分:0)

您需要为您的g ++版本编译libgurobi_c ++。

首先,转到文件夹

None

现在,您需要将已编译的文件复制到lib文件夹:

  

cd /opt/gurobi751/linux64/src/build/ make

您将编译并运行。