2017-10-16 54 views
2

我刚刚将Gurobi更新到Linux(Ubuntu)上的7.5.1版 - 这是可用的最新版本。无法编译版本7.5.1中的Gurobi示例

问题任我试图编译使用Gurobi任何代码 - 例如,包括在/opt/gurobi751/linux64/examples的例子中,我只是得到未定义参考误差的一个字符串(例如undefined reference to GRBModel::set(...))。如果我可以访问目录/opt/gurobi751/linux64/examples/build并运行命令make run_diet_c++并编译并运行,我会考虑解决问题。

尝试的修复

(1)我在.bashrc文件中设置$GUROBI_HOME - 它指向正确的目录。 $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 

这编译和无怨无悔地运行。然而,我试过这个例子:

​​

并编译它与相同的命令,并失败。所以它看起来像包括声明工作正常,但不知何故它没有正确链接到库?

如果需要更多信息,请让我知道。另外,如果不清楚,我不太了解汇编和链接过程,这可能会阻碍我的发展。

+0

Ubuntu发布什么?来自默认C++编译器的任何更改?C示例是否可以编译并从Makefile运行? –

+0

@GregGlockner Ubuntu 16.04 LTS。只需使用带有标志的标准'g ++'编译器即可。 C示例不会*编译和运行。 –

+0

@GregGlockner关于C例子的更多细节:当我尝试在加载共享库时出现错误:libgurobi75.so:无法打开共享对象文件:没有这样的文件或目录。但是,(1)'libgurobi75.so'位于'include'目录中,并且(2)它仍然生成可正确运行的可执行文件... !! –

回答

1

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

首先,进入该文件夹

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

make 

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

cp libgurobi_c++.a ../../lib/

您将编译并跑。

+1

我忘记了这个问题。事实上,我的g ++已经更新到版本5,但我没有意识到,这是造成这个问题的原因。 –