2011-12-20 71 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 
相关问题