コンパイル済みのライブラリに対して 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
{
public:
QN_InFtrLabStream_PFile(int a_debug, const char* a_dbgname, FILE* a_file, int a_indexed);
(... 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)
{
(... the usual constructor stuff :P ...)
}
エラーなしで自分でquicknet3ライブラリをコンパイルし、/home/install/x86_64/lib/libquicknet3.aにインストールしました
そのため、trapper.cpp からの呼び出しでこのコンストラクター定義への参照が見つからない理由がわかりません。の g++ 引数で-L/home/install/x86_64/lib -lquicknet3
うまくいくはずですよね?
何か案は?
ありがとう、ロイ