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

Getting Cplex example to run: Undefined references

本文关键字:引用 未定义 Cplex 示例 运行      更新时间:2023-10-16

我正在尝试让 Cplex 基本 LP 示例正常工作。代码可以在这里找到。我对 c++ 完全陌生,但希望能够运行它。

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

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

放置 -D IL_STD 是为了解决此处发现的错误。-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*)'

我没有对文件进行任何更改,因此我认为唯一可能出错的是文件的链接方式。我觉得它可能只是一个简单的设置,但经过几个小时的寻找,我仍然不知道如何解决它。

编译

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

这将告诉您将来选择手动编译自己的应用程序时需要知道的所有信息。文档中对此进行了描述(例如,此处(。

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

你还需要的是IloCplex本身。这应该作为 (a( 您必须使用演示编译的进一步源文件或作为您链接的库。

看看你的 cplex 目录,你可能会在那里的某个地方找到一个lib[...].a文件,可能在 /opt/ibm/ILOG/CPLEX_Studio1271/opl/lib .

您可以使用 GCC 的 (clang( -l 和 -L 选项进行链接。请注意,使用 -l 时,您省略了lib.a(-l [...]上面(无效(示例名称(。