未定义的静态方法引用

时间:2011-12-20 19:36:47

标签: c++ compilation

我正在尝试编译此代码并且链接失败并出现以下错误: 这就是我编译它的方式;

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";
}

2 个答案:

答案 0 :(得分:5)

这听起来像链接器错误。确保正确链接所有目标文件

答案 1 :(得分:3)

您需要在编译器调用中列出所有编译单元(.cc文件):

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