Я компилирую и связываю файл cpp с предварительно скомпилированной библиотекой, и получаю ошибку «неопределенная ссылка».
Во-первых, это команда (рассматриваемая библиотека - quicknet3, программа, которую я компилирую, - trapper):
g++ -w -g -I. -g -O3 -pipe -Wall -I/home/install/x86_64/include/quicknet3 -L/home/install/x86_64/lib -lquicknet3 -lintvec -lfltvec -o trapper trapper.cpp CMyException.cpp
Вот неопределенная ошибка ссылки:
/tmp/ccFuVczF.o: In function 'main':
trapper.cpp:1731: undefined reference to 'QN_InFtrLabStream_PFile::QN_InFtrLabStream_PFile(int, char const*, _IO_FILE*, int)'
Вызов в trapper.cpp (строка 1731):
IN_PFILE = new QN_InFtrLabStream_PFile(0, "", fp, 1);
, где fp
- это FILE *
, назначенный в результате предварительного вызова fopen
.
Вызываемый конструктор определяется в соответствующем заголовочном файле (QN_Pfile.h) следующим образом:
class QN_InFtrLabStream_PFile : public
QN_InFtrLabStream<br>
{<br>
public:<br>
QN_InFtrLabStream_PFile(int a_debug, const char* a_dbgname, FILE* a_file, int a_indexed);<br>
(... other declarations ...)
}
Определение конструктора действительно дано в QN_Pfile.cc:
.
QN_InFtrLabStream_PFile::QN_InFtrLabStream_PFile(int a_debug,const char* a_dbgname, FILE* a_file, int a_indexed) : log(a_debug, "QN_InFtrLabStream_PFile", a_dbgname),file(a_file),indexed(a_indexed),buffer(NULL),sentind(NULL)
{<br>
(... the usual constructor stuff :P ...)
}
Я сам без ошибок скомпилировал библиотеку quicknet3 и установил ее в /home/install/x86_64/lib/libquicknet3.a
Итак, я не могу понять, почему вызов trapper.cpp не может найти ссылку на это определение конструктора. Аргументы g ++ -L/home/install/x86_64/lib -lquicknet3
должны помочь, не так ли?
Есть идеи?
Спасибо,
Рой