2011-12-20 27 views
0

我試圖編譯此代碼並且鏈接失敗,出現以下錯誤: 這是我如何編譯它的;對靜態方法的未定義引用

g++ logtester.cc -I/home/foo/include -L/home/foo/lib -llog4cxx 


/tmp/ccADKreY.o(.text+0x120): In function `main': undefined reference to `FrameworkLogger::getInstance()' 
collect2: ld returned 1 exit status  

爲什麼?我該如何解決它?

#include <log4cxx/logger.h> 
#include <log4cxx/xml/domconfigurator.h> 

using namespace log4cxx; 
using namespace log4cxx::xml; 
using namespace log4cxx::helpers; 

class FrameworkLogger 
{ 
    private: 
     FrameworkLogger(); 
     LoggerPtr logger; 

    public: 
     static LoggerPtr getInstance(); 

}; 

(另一個文件:

#include "FrameworkLogger.h" 
#include <iostream> 

LoggerPtr FrameworkLogger::getInstance() 
{ 
    std::cout<<"test"; 
} 

(另一個文件:

#include "FrameworkLogger.h" 
#include <iostream> 

using namespace std; 

int main(){ 
//  LoggerPtr logger = 
     FrameworkLogger::getInstance(); 
     std::cout<<"test"; 
} 
+0

你能告訴你的是什麼編譯器調用樣子? – 2011-12-20 19:39:01

+0

我敢打賭,你的連接器行是錯誤的,並錯過了我在這裏用「另一個文件」命名的文件。你能否顯示你的編譯器調用? – thiton 2011-12-20 19:41:14

+0

我編輯了答案並添加了編譯器調用。 – DarthVader 2011-12-20 19:42:42

回答

5

這聽起來像一個連接錯誤。確保您正確連接所有對象文件

+0

對'FrameworkLogger :: getInstance()'的未定義引用,這怎麼會是鏈接器錯誤?他們都在同一個目錄中。我需要包含在彙編中嗎? – DarthVader 2011-12-20 19:40:16

+1

@DarthVader它是一個鏈接器錯誤。編譯器不會產生「未定義的引用」錯誤消息。編譯時請確保指定了所有的.cpp文件。 – 2011-12-20 19:41:11

3

你需要列出在編譯器調用所有編譯單元(.cc的文件):

g++ logtester.cc the-file-you-have-not-named.cc -I/home/foo/include -L/home/foo/lib -llog4cxx 
相關問題