将 Cplex 示例获取到 运行:未定义的引用
Getting Cplex example to run: Undefined references
我正在尝试让 Cplex 基本 LP 示例运行。可以找到代码 here。我是 c++ 的新手,但希望能够得到这个 运行ning。
我正在尝试在 linux 上编译它。我正在使用以下命令 运行 it
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*)'
我没有对文件进行任何更改,所以我认为唯一可能出错的是文件的链接方式。我觉得这可能只是一个简单的设置,但看了几个小时后我仍然不知道如何修复它。
显然,iloplex1.cpp 文件只是一个如何使用 IloCplex 的演示。
您还需要的是 IloCplex 本身。这应该作为 (a) 您必须与演示一起编译的其他源文件或作为您 link 反对的库。
查看您的 cplex 目录,您可能会在某处找到一个 lib[...].a
文件,可能 在 /opt/ibm/ILOG/CPLEX_Studio1271/opl/lib
中。
您可以link 反对使用 GCC (clang) -l and -L options。请注意,在使用 -l
时,您会遗漏 lib
和 .a
(-l [...]
以及上述(无效)样本名称)。
编译 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)。
我正在尝试让 Cplex 基本 LP 示例运行。可以找到代码 here。我是 c++ 的新手,但希望能够得到这个 运行ning。
我正在尝试在 linux 上编译它。我正在使用以下命令 运行 it
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*)'
我没有对文件进行任何更改,所以我认为唯一可能出错的是文件的链接方式。我觉得这可能只是一个简单的设置,但看了几个小时后我仍然不知道如何修复它。
显然,iloplex1.cpp 文件只是一个如何使用 IloCplex 的演示。
您还需要的是 IloCplex 本身。这应该作为 (a) 您必须与演示一起编译的其他源文件或作为您 link 反对的库。
查看您的 cplex 目录,您可能会在某处找到一个 lib[...].a
文件,可能 在 /opt/ibm/ILOG/CPLEX_Studio1271/opl/lib
中。
您可以link 反对使用 GCC (clang) -l and -L options。请注意,在使用 -l
时,您会遗漏 lib
和 .a
(-l [...]
以及上述(无效)样本名称)。
编译 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)。