Я должен скомпилировать и запустить проект третьего лица, который написан на C++, к сожалению, у меня нет опыта работы с C++, и после решения всех проблем с укладкой com- я сталкиваюсь с рядом проблем с привязкой. Я получаю для многих своих классов и функций типичную ошибку привязки "неопределенной ссылки на". Поскольку код real- огромный и состоит из множества разных файлов, я представляю вам следующий очень маленький основной файл, в котором я пытаюсь скомпилировать и запустить с помощью одной из функций, с которыми у меня возникла проблема, и где я также получите даже в этой небольшой программе ту же ошибку связывания. Поэтому, надеюсь, если мне удастся найти способ решить эту часть кода, я с удовольствием справичу. Прежде чем показывать вам сам код, позвольте мне сказать в ad-, что в этом случае я пытаюсь вызвать функцию из cplex.h и сохранить вас от некоторых предложений, которые я уже установил правильно cplex (одна вещь, которую я могу проверить из того, что я могу использовать некоторые cplec func- и команды без проблем), и что я также добавил cplex как одну из моих внешних библиотек (я использую Eclipse IDE), более того, я испытываю ту же ошибку lin- king для других функций а не cplex. Наконец, я подробно исследовал последние пару дней на этом веб-сайте и вообще о связи ошибок, не имея возможности самостоятельно решать. В результате всякая помощь очень ценится. Итак, вот код:
#include <iostream>
#include "/home/used/cplex/include/ilcplex/cplex.h"// that my cplex.h path
using namespace std;
int main(){
double temp;
int a,c;
CPXENVptr env;// in these two uses of cplex variables I don't get any error
CPXNETptr net;//
CPXNETgetdj( env , net , &temp , c , a ); // when I try to use this or any function from cplex I get an linking error
return( 0 );
}
Я также представляю исходную функцию, поскольку она написана в cplex.h, чтобы увидеть, что я правильно использую функцию, чтобы я не путал компоновщик с неправильным использованием функции.
CPXLIBAPI
int CPXPUBLIC
CPXNETgetdj (CPXCENVptr env, CPXCNETptr net, double *dj, int begin,
int end);
Сама ошибка принтера:
Building target: structures
Invoking: Cross G++ Linker
g++ -o "structures" ./src/div.o ./src/prod.o ./src/structures.o
./src/structures.o: In function 'main':
/home/used/workspace/structures/Debug/../src/structures.cpp:21: undefined reference to 'CPXNETgetdj'
collect2: error: ld returned 1 exit status
#include "/home/used/cplex/include/ilcplex/cplex.h"
будет работать только в том случае, если /
был в #include "/home/used/cplex/include/ilcplex/cplex.h"
. Также нет аргументов, которые отвечают за фактическое включение библиотек CPLEX.
Я бы предложил изменить его на #include "ilcplex/cplex.h"
для переносимости, а затем запустить его, как:
g++ -o "structures" ./src/div.o ./src/prod.o ./src/structures.o \
-I/home/used/cplex/include -L/home/used/cplex/lib/x86-64_debian4.0_4.1/static_pic \
-lcplex -lilocplex
хотя вы должны сделать то, что является фактическим путем к библиотеке (будь то /home/used/cplex/lib/x86-64_debian4.0_4.1/static_pic
- правильный путь) и, возможно, исправить его вправо.
На основании документации, найденной здесь.
lib
- если нет, ваша установка может быть неполной. Если это так, попробуйте мой отредактированный ответ.