首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用G++和CPLEX修复这个“未定义引用”错误?

如何使用G++和CPLEX修复这个“未定义引用”错误?
EN

Stack Overflow用户
提问于 2020-08-06 09:52:01
回答 1查看 375关注 0票数 0

我很抱歉,如果这不是正确的社会问这个问题,在这种情况下,请告诉我哪一个是。我尝试过一些IBM论坛,但我得到了一个(一般?)当我试图在那里启动一个线程时出错。我对CPLEX很有经验(在Windows上,使用visual c++),但是当我试图在Ubuntu上用g++编译以下简单的空模型时,我会得到一个错误。我正在编写的代码是: ModelFlow.cpp:

代码语言:javascript
复制
#include <lsndp_heuristic/ModelFlow.h>

ModelFlow::ModelFlow(HeurGraph graph, Instance::ptr instance)
:   graph(graph), instance(instance), env(), model(env), cplex(model)
{
}

ModelFlow.h:

代码语言:javascript
复制
class ModelFlow
{
 private:
 IloEnv env;
 IloModel model;
 IloCplex cplex;

 HeurGraph graph;
 Instance::ptr instance;

 public:
 ModelFlow(HeurGraph graph, Instance::ptr Instance);
 ModelFlow() = default;
 ~ModelFlow() = default;
};

当我运行"make“时,带有错误消息的输出是这样的(”格式“):

代码语言:javascript
复制
g++ -g -std=c++17 -D IL_STD 
-I LinerNetworks/src 
-I /usr/include/boost 
-I /opt/ibm/ILOG/CPLEX_Studio1210/concert/include 
-I /opt/ibm/ILOG/CPLEX_Studio1210/cplex/include 
-L /opt/ibm/ILOG/CPLEX_Studio1210/concert/lib/x86-64_linux/static_pic 
-L /opt/ibm/ILOG/CPLEX_Studio1210/cplex/lib/x86-64_linux/static_pic 
LinerNetworks/obj/shared/SailingLeg.o 
LinerNetworks/obj/shared/Ship.o 
LinerNetworks/obj/shared/Port.o 
LinerNetworks/obj/shared/ShipRoute.o 
LinerNetworks/obj/shared/Instance.o 
LinerNetworks/obj/new_liner_networks/graph/Arc.o 
LinerNetworks/obj/new_liner_networks/graph/Node.o 
LinerNetworks/obj/new_liner_networks/graph/GraphFactory.o 
LinerNetworks/obj/lsndp_heuristic/FlowAlgorithm.o 
LinerNetworks/obj/lsndp_heuristic/Main.o 
LinerNetworks/obj/lsndp_heuristic/MoveShip.o 
LinerNetworks/obj/lsndp_heuristic/AddPort.o 
LinerNetworks/obj/lsndp_heuristic/Neighborhood.o 
LinerNetworks/obj/lsndp_heuristic/RemovePort.o 
LinerNetworks/obj/lsndp_heuristic/ModelFlow.o 
LinerNetworks/obj/lsndp_heuristic/Misc.o 
LinerNetworks/obj/lsndp_heuristic/Solution.o 
LinerNetworks/obj/lsndp_heuristic/graph/ArcHeur.o 
LinerNetworks/obj/lsndp_heuristic/graph/NodeHeur.o 
LinerNetworks/obj/lsndp_heuristic/graph/GraphFactoryHeur.o 
-o heuristic
/usr/bin/ld: LinerNetworks/obj/lsndp_heuristic/ModelFlow.o: in function `ModelFlow::ModelFlow(boost::adjacency_list<boost::vecS, boost::listS, boost::bidirectionalS, VertexProperty, EdgeProperty, boost::no_property, boost::listS>, std::shared_ptr<Instance>)':
/home/nemanja/Projects/phd/lsndp_heuristic/LinerNetworks/src/lsndp_heuristic/ModelFlow.cpp:4: undefined reference to `IloEnv::IloEnv()'
/usr/bin/ld: /home/nemanja/Projects/phd/lsndp_heuristic/LinerNetworks/src/lsndp_heuristic/ModelFlow.cpp:4: undefined reference to `IloModel::IloModel(IloEnv, char const*)'
/usr/bin/ld: /home/nemanja/Projects/phd/lsndp_heuristic/LinerNetworks/src/lsndp_heuristic/ModelFlow.cpp:4: undefined reference to `IloCplex::IloCplex(IloModel)'
collect2: error: ld returned 1 exit status
make: *** [makefile:26: all] Error 1

我检查了文件夹/opt/./音乐会/include和/opt/./cplex/include,它们确实包含iloenv.h、ilocplex.h、ilocplexi.h和ilomodel.h文件。特别是由于这个原因,我不知道我做错了什么。如果我需要提供更多的信息,请告诉我。对于本帖子中任何初学者的问题,请事先表示歉意,这是我的第一篇文章。愿新冠肺炎跳过你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-07 05:41:45

您似乎缺少了链接器所需的库。您只指定了-L选项来告诉链接器在哪里找到库。您没有添加-l选项来指示要链接的库。尝试在-o heuristic之前添加以下内容

代码语言:javascript
复制
-lconcert -lilocplex -lcplex -lm -lpthread -ldl

通常,要找到用于编译的正确标志,可以转到INSTALLDIR/cplex/examples/x86-64_linux/static_pic并运行make blend。这显示了编译和链接器命令,您可以从那里获取所需的标志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63281021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档