无法编译版本 7.5.1 中的 Gurobi 示例
Cannot compile Gurobi examples in version 7.5.1
我刚刚在 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) 我在 .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
这编译和 运行s 没有抱怨。但是,我试过这个例子:
#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 语句工作正常,但不知何故它没有正确链接到库?
如果需要更多信息,请告诉我。另外,如果不清楚,我对编译和链接过程不是很了解,这可能会阻碍我。
您需要为您的 g++ 版本编译 libgurobi_c++。
首先,转到文件夹
cd /opt/gurobi751/linux64/src/build/
make
现在,您需要将编译后的文件复制到lib文件夹:
cp libgurobi_c++.a ../../lib/
您将编译并运行。
我刚刚在 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) 我在 .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
这编译和 运行s 没有抱怨。但是,我试过这个例子:
#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 语句工作正常,但不知何故它没有正确链接到库?
如果需要更多信息,请告诉我。另外,如果不清楚,我对编译和链接过程不是很了解,这可能会阻碍我。
您需要为您的 g++ 版本编译 libgurobi_c++。
首先,转到文件夹
cd /opt/gurobi751/linux64/src/build/ make
现在,您需要将编译后的文件复制到lib文件夹:
cp libgurobi_c++.a ../../lib/
您将编译并运行。