2009-03-26 11 views
1

私はライブラリを作って、Borland Codegear 2007の最新バージョンlog4cppで提供されているテストを実行しようとしています。このテストには、Borland C++ Builder 5のbprプロジェクトが含まれています。さまざまなテストを構築して実行できるようにすることを目的としていました。問題は、プロジェクト変換を実行する必要がある2007バージョンでこのプロジェクトを開こうとしていることです。私は奇妙な「解決されていない外部」エラーを受けていました。その後、私は何も変換せずにプロジェクトを自分で構築しようとしましたが、同じポイントで固執しました。log4cppは `未解決の外部エラー 'を返します

私は次のテストを実行しようとしている:

#include <stdio.h> 
#include "log4cpp/Portability.hh" 
#ifdef LOG4CPP_HAVE_UNISTD_H 
#include <unistd.h> 
#endif 
#include <iostream> 
#include "log4cpp/Category.hh" 
#include "log4cpp/Appender.hh" 
#include "log4cpp/FileAppender.hh" 
#include "log4cpp/OstreamAppender.hh" 
#ifdef LOG4CPP_HAVE_SYSLOG 
#include "log4cpp/SyslogAppender.hh" 
#endif 
#include "log4cpp/Layout.hh" 
#include "log4cpp/BasicLayout.hh" 
#include "log4cpp/Priority.hh" 
#include "log4cpp/NDC.hh" 

int main(int argc, char** argv) { 
    log4cpp::Appender* appender; 
#ifdef LOG4CPP_HAVE_SYSLOG 
    log4cpp::SyslogAppender* syslogAppender; 

    syslogAppender = new log4cpp::SyslogAppender("syslog", "log4cpp"); 
#else 
    log4cpp::Appender* syslogAppender; 

    syslogAppender = new log4cpp::OstreamAppender("syslogdummy", &std::cout); 
#endif 

    if (argc < 2) { 
     appender = new log4cpp::OstreamAppender("default", &std::cout); 
    } else { 
     appender = new log4cpp::FileAppender("default", argv[1]); 
    } 

    syslogAppender->setLayout(new log4cpp::BasicLayout()); 
    appender->setLayout(new log4cpp::BasicLayout()); 

    log4cpp::Category& root = log4cpp::Category::getRoot(); 
    root.addAppender(syslogAppender); 
    root.setPriority(log4cpp::Priority::ERROR); 

    log4cpp::Category& sub1 = log4cpp::Category::getInstance(std::string("sub1")); 
    sub1.addAppender(appender); 

    log4cpp::Category& sub2 = log4cpp::Category::getInstance(std::string("sub1.sub2")); 

    log4cpp::NDC::push(std::string("ndc1")); 

    std::cout << " root prio = " << root.getPriority() << std::endl; 
    std::cout << " sub1 prio = " << sub1.getPriority() << std::endl; 
    std::cout << " sub2 prio = " << sub2.getPriority() << std::endl; 

    root.error("root error"); 
    root.warn("root warn"); 
    sub1.error("sub1 error"); 
    sub1.warn("sub1 warn"); 
    sub2.error("sub2 error"); 
    sub2.warn("sub2 warn"); 

    sub1.setPriority(log4cpp::Priority::INFO); 
    std::cout << " root prio = " << root.getPriority() << std::endl; 
    std::cout << " sub1 prio = " << sub1.getPriority() << std::endl; 
    std::cout << " sub2 prio = " << sub2.getPriority() << std::endl; 

    std::cout << "priority info" << std::endl; 
    root.error("root error"); 
    root.warn("root warn"); 
    sub1.error("sub1 error"); 
    sub1.warn("sub1 warn"); 
    sub2.error("sub2 error"); 
    sub2.warn("sub2 warn"); 

    sub2.warnStream() << "streamed warn"; 

    sub2 << log4cpp::Priority::WARN << "warn2" << " warn3" 
      << log4cpp::eol << " warn4"; 

    { 
     for(int i = 0; i < 10000; i++) { 
      char ndc2[20]; 
      sprintf(ndc2, "i=%d", i); 
      log4cpp::NDC::push(ndc2); 
      sub1.info("%s%d", "i = ", i); 
      if ((i % 10) == 0) { 
       sub1.log(log4cpp::Priority::NOTICE, "reopen log"); 
       if (log4cpp::Appender::reopenAll()) { 
        sub1.info("log reopened"); 
       } else { 
        sub1.warn("could not reopen log"); 
       } 
      } 
#ifndef WIN32 
      sleep(1); 
#endif 
      log4cpp::NDC::pop(); 
     } 
    } 

    return 0; 
} 

エラーすべてに約ある「未解決の外部」のような、:

[ILINK32 Error] Error: Unresolved external 'log4cpp::Category::warn(const char *, ...)' referenced from C:\DOCUMENTS AND SETTINGS\MLERMA\MIS DOCUMENTOS\RAD STUDIO\PROJECTS\DEBUG\TESTMAIN.OBJ 

私はこの種のエラーを取得していますlog4cpp関数を呼び出すたびに、TESTMAIN.OBJを参照します。

これに関するご意見はありますか? Borlandのlog4cppで働いている人は誰ですか?

答えて

1

あなたはlog4cppライブラリ(.LIB)にリンクしていますか?私はBCB5やCodegearに精通していませんが、あなたのプロジェクト設定であなたのリンクライブラリをチェックし、log4cppライブラリが含まれていることを確認してください。

これは、コンパイラがライブラリを探している場所に問題がある可能性があります。通常、IDEには、コンパイラが.libファイルを探す場所を示すプロジェクトレベルまたはグローバル設定があります。設定を確認し、それらのディレクトリの1つにlog4cpp .libファイルが含まれていることを確認してください。

マイク

+0

はい、これらの例外はこれらのライブラリに原因があるようです。しかし、それはリンクされ、それは動作しません:( – markitus82

0

#pragma comment(lib,"ws2_32.lib")があなたのヘッダファイルを実行します追加してみてください。