[英]g++ undefined reference to constructor
我正在針對預編譯的庫編譯並鏈接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的調用無法找到對此構造函數定義的引用。 -L/home/install/x86_64/lib -lquicknet3
的g ++參數應該可以解決問題,對嗎?
有任何想法嗎?
謝謝羅伊
我注意到您正在混合FILE*
和_IO_FILE*
。 我對后者不熟悉,您確定它們是相同的嗎?
FILE是_IO_FILE
的typedef。 您的鏈接器將其視為唯一類型。
您可以嘗試:
IN_PFILE = new QN_InFtrLabStream_PFile(0, "", (FILE *)fp, 1);
看看這是否可以解決您的構造函數。
(如果您有興趣,則在stdio.h中定義文件,在libio.h中的_IO_FILE中定義文件)
一種快速的解決方法是將/home/install/x86_64/lib/libquicknet3.a添加到g ++命令行。
我想進一步研究,如果g ++選擇了另一個libquicknet3副本,則可以將-v傳遞給g ++,以便輸出其搜索路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.