簡體   English   中英

g ++對構造函數的未定義引用

[英]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);

其中fpFILE * ,它是預先通過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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM