我正在用C ++创建一个代码,该代码使用一个名为Concorde
的库来解决一个众所周知的问题,称为旅行商问题。该库可用here
我首先运行./configure --with-cplex=<CPLEX_DIR>
然后make
编译,产生两个主文件concorde.a
和concorde.h
。通过这种方式,concorde被配置为运行并使用IBM Cplex作为精确求解器。
我正在使用Code :: Blocks作为IDE,在构建选项中,我在concorde.a
下添加了库(Link libraries
),并在我的代码中包含了标题。
然而,当我尝试编译我的代码时,它给了我错误,表明它无法找到我调用的并且在concorde.h
文件中定义的concorde函数的实现。在这种情况下,错误为"undefined reference to <function>"
。
任何人都可以帮助我吗?
代码块的构建日志的最后一部分如下:
g++ -L/opt/ibm/ILOG/CPLEX_Studio1251/cplex/lib/x86-64_sles10_4.1/static_pic
-L/opt/ibm/ILOG/CPLEX_Studio1251/concert/lib/x86-64_sles10_4.1/static_pic
-L/opt/concorde -o bin/Debug/SVRPDSP obj/Debug/instance.o obj/Debug/lib/combo.o
obj/Debug/lib/IncumbentCallback2C.o obj/Debug/lib/lazyCallback2C.o
obj/Debug/lib/lazyCallbackGLS.o obj/Debug/lib/lib_algorithms.o
obj/Debug/lib/lib_general.o obj/Debug/solution.o -lrt -lilocplex -lcplex
-lconcert -lm -lpthread /opt/concorde/concorde.a
ps:我正在编译Ubuntu 13.10
感谢。
答案 0 :(得分:0)
首先:协和版不支持CPLEX 12.5
我已下载QSopt并已启动./configure --with-qsopt=QSOPT_DIR
最后,libs的顺序如下:
-lilocplex -lconcert -lcplex /opt/concorde/concorde.a /opt/QS/qsopt.a -lm -lpthread