Я делаю код в C++, который shoudl использует библиотеку, которая называется Concorde
для решения хорошо известной проблемы, называемой Traveling Salesman Problem. Эта библиотека доступна здесь
Я составитель первой запущенной ./configure --with-cplex=<CPLEX_DIR>
, а затем make
в результате двух основных файлов concorde.a
и concorde.h
. Таким образом, concorde настроен для запуска и использования IBM Cplex в качестве точного решателя.
Я использую Code :: Blocks как IDE, а в вариантах сборки я добавил библиотеку (concorde.a
) в Link libraries
и включил заголовок в свой код.
Однако, когда я пытаюсь скомпилировать свой код, он дает мне и ошибку, указывающую, что он не может найти реализацию функций concorde, которые я вызываю и которые определены в файле concorde.h
. В этом случае ошибка является "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
Благодарю.
Прежде всего: Concorde не поддерживает CPLEX 12.5.
Я загрузил QSopt и запустил ./configure --with-qsopt=QSOPT_DIR
.
Наконец, порядок libs следующий:
-lilocplex -lconcert -lcplex /opt/concorde/concorde.a /opt/QS/qsopt.a -lm -lpthread