让Cplex示例运行:未定义的引用

时间:2018-03-15 17:55:14

标签: c++ cplex

我正在努力让Cplex基本LP示例正常工作。代码可以找到here。我是c ++的新手,但希望能够让它运行起来。

我正在尝试在linux上编译它。我正在使用以下命令来运行它

g++ -D IL_STD  -I /opt/ibm/ILOG/CPLEX_Studio1271/opl/include  ilolpex1.cpp

-D IL_STD用于解决发现here的错误。 -I ...被放在那里指定头文件的位置。经过大量的尝试和谷歌搜索,我自己想出了这个,所以我不确定这是否正确。

无论如何,当我运行它时,我得到未定义引用的错误:

/tmp/ccl9O1YF.o: In function `populatebyrow(IloModel, IloNumVarArray, IloRangeArray)':
ilolpex1.cpp:(.text+0x18f): undefined reference to `IloNumVar::IloNumVar(IloEnv, double, double, IloNumVar::Type, char const*)'

我没有对文件进行任何更改,所以我假设唯一可能出错的是文件是如何链接的。我觉得它可能只是一个简单的设置,但看了几个小时后我仍然不知道如何解决它。

2 个答案:

答案 0 :(得分:1)

编译ilolpex1.cpp示例的最简单方法是使用安装中包含的Makefile。例如,您应该执行以下操作:

$ cd /opt/ibm/ILOG/CPLEX_Studio1271/cplex/examples/x86-64_linux/static_pic
$ make ilolpex1

这将产生输出,如下所示:

g++ -O0 -c -m64 -O -fPIC -fno-strict-aliasing -fexceptions -DNDEBUG -DIL_STD -I../../../include -I../../../../concert/include  ../../../examples/src/cpp/ilolpex1.cpp -o ilolpex1.o
g++ -O0 -m64 -O -fPIC -fno-strict-aliasing -fexceptions -DNDEBUG -DIL_STD -I../../../include -I../../../../concert/include  -L../../../lib/x86-64_linux/static_pic -L../../../../concert/lib/x86-64_linux/static_pic -o ilolpex1 ilolpex1.o -lconcert -lilocplex -lcplex -lm -lpthread

如果您选择在将来手动编译自己的应用程序,这将告诉您需要知道的所有内容。文档中描述了有关此内容的详细信息(例如,here)。

答案 1 :(得分:0)

显然,iloplex1.cpp文件只是演示如何使用 IloCplex。

您需要的是IloCplex 本身。这应该是(a)您必须使用演示编译的其他源文件或作为您链接的库。

查看您的cplex目录,您可能会在lib[...].a的某处找到/opt/ibm/ILOG/CPLEX_Studio1271/opl/lib文件,可能

您可以使用GCC(clang's)-l and -L options进行链接。请注意,在使用-l时,您会遗漏lib.a-l [...]以及(无效的)样本名称)。