11

これは私を夢中にさせています。私が使用しているc ++プロジェクトで使用するためにlog4cxxライブラリを構築しようとしています。私は、VS2010 Express C++ エディションを実行している win7 ホストを使用しています。apr と apr-util のダウンロードや .hw ファイルのモチーフ化など、log4cxx の指示 ( ) に従っていますが、残念ながら、log4cxx.dsw ソリューションを読み込んで現在の VS に変換しようとすると、 apr.apr/dsw およびその他の依存する .dsw ファイルをビルドしようとするとエラーが発生します。助言がありますか?

具体的には、私が見ているのは次のとおりです。

The Project file 'C:\...projects\apr-util\xml\expat\lib\xml.dsp' cannot be loaded. Do you want to remove the unloadable project from the solution?

これは、他の多くの .dsp ファイルで見られます。

次に、VC の出力ボックスに次のように入力します。

C:\Users\x\Documents\Visual Studio 2010\Projects\apr\apr.dsp : error  : Project upgrade failed.

C:\Users\x\Documents\Visual Studio 2010\Projects\apr-util\xml\expat\lib\xml.dsp : error  : Project upgrade failed.

C:\Users\x\Documents\Visual Studio 2010\Projects\apr-util\aprutil.dsp : error  : Project upgrade failed.

C:\Users\x\Documents\Visual Studio 2010\Projects\apache-log4cxx-0.10.0\projects\log4cxx.dsp : error  : Project upgrade failed.

ありがとう

ファイルは正しいパスにあります。

4

4 に答える 4

24

VS2010 で動作する log4cxx (バージョン 0.10.0) を取得するには、次の手順に従う必要があります。

  1. ここから最新の log4cxx パッケージをダウンロードします
  2. ここから apr および apr-util ZIP パッケージをダウンロードします
  3. log4cxx、apr および apr-util を同じディレクトリに抽出します。
  4. apr_VERSION および apr-util_VERSION フォルダーの名前を apr および apr-util に変更すると、apache-log4cxx-0.10.0、apr および apr-util の 3 つのフォルダーを含むディレクトリが作成されます。
  5. log4cxx ディレクトリに移動し、configure.bat を実行します。
  6. apr-util/include ディレクトリに変更しapu.hw、選択したテキストエディタで開きます
  7. エントリを見つけ#define APU_HAVE_APR_ICONVて 0 に設定し、ファイルを保存します
  8. 同じディレクトリから開きapr_ldap.hw、エントリを見つけ#define APR_HAS_LDAPて 0 に設定し、ファイルも保存します。
  9. log4cxx/projects ディレクトリに移動し、VS2010 で log4cxx.dsw を開きます。各プロジェクト (apr、apr-util、log4cxx、xml) について、VS2010 の変換プロンプトに yes/ok で応答します。

ここでビルドを実行すると、約 2000 のエラーが表示されます。ここから、興味深い「難しい」部分が始まります。

  • Ctrl+F を押して、「LOG4CXX_LIST_DEF」マクロの各エントリを見つけます。これらのエントリを関連するクラスから移動し、同じクラスの直前に移動する必要があります。場合によっては、typedef も移動するか、マクロの直前にクラスを追加する必要があります。

いくつかの例:

    // telnetadapter.h
    ...
    typedef log4cxx::helpers::SocketPtr Connection;
    LOG4CXX_LIST_DEF(ConnectionList, Connection);
    class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton
    ...

    // appender.h
    ...
    class Appender;
    LOG4CXX_PTR_DEF(Appender);
    LOG4CXX_LIST_DEF(AppenderList, AppenderPtr);

    class Layout;
    typedef log4cxx::helpers::ObjectPtrT<Layout> LayoutPtr;

    ...

    class LOG4CXX_EXPORT Appender :
                public virtual spi::OptionHandler
    {
    ...
  • コンパイラが KeySet が LoggingEvent のメンバーではないというエラーを出した場合は、スコープを削除してください (前の手順で型をクラスの外に移動したため、これらの型はクラス内になくなりました)。

例:

   // old
   LoggingEvent::KeySet set;
   // new
   KeySet set;
  • insert_iterator が名前空間 std にないことについてコンパイラが文句を言う場合は#include <iterator>、ソース ファイルの include セクションに追加します。

  • 最後に、log4cxx プロジェクトを右クリックして [参照の追加] を選択し、他の 3 つのプロジェクトを参照として選択します。


これがあなたと他の人に役立つことを願っています:) ...ソリューション全体または他のファイルが必要な場合は、お知らせください!

Lex LI によるこのブログ エントリの多大な助けを借りて、これらの手順を理解しました。

編集: ドロップボックスから VS2010 ソリューションとソース コードをダウンロードできます: https://www.dropbox.com/s/rn5d0044jzgzwyf/log4cxx_vs2010.7z

于 2012-11-09T15:24:57.153 に答える
4

第 1 章 正式な手順

http://logging.apache.org/log4cxx/building/vstudio.htmlの手順に従います。ただし、windows/VS201* に適応するために変更を加える必要があります。

  1. ここから Apache log4cxx 0.10 である log4cxx の新しいバージョンをダウンロードします。http://logging.apache.org/log4cxx/download.html

  2. https://archive.apache.org/dist/apr/から依存関係をダウンロードします

  3. 公式の建築ガイドラインに従うのは非常に簡単です。

unzip apr-1.2.11-win32-src.zip
rename apr-1.2.11 apr
unzip apr-util-1.2.10-win32-src.zip
rename apr-util-1.2.10 apr-util
cd apache-log4cxx-0.10.0
configure
configure-aprutil
  1. 開発者のマシンに gow をインストールすることをお勧めします。そうすれば、UNIX/Linux のようなツールがたくさんあり、非常に便利です。または、git がある場合は、git cmd ツールを環境に追加できます。
configure
configure-aprutil

上記の 2 cmd には sed.exe が必要です。実行する前にインストール (gow/git) してください。または、apu.hw と apr_ldap.hw を手動で変更できます。

apr_ldap.hw を開き、エントリ #define APR_HAS_LDAP を見つけて、0 に設定し、ファイルも保存します。apu.hw を開き、エントリ #define APU_HAVE_APR_ICONV を見つけ、0 に設定してファイルを保存します。

第 2 章 Log4cxx のビルド

  1. ここで、*.dsw を *.cxproj に変換する必要があります。スムーズに行うには、Visual Studio 201* を起動して log4cxx.dsw を開きます。VS は、すべてを変換するかどうかを尋ねます。[はい] をクリックするだけです。

  2. log4cxx をスタートアップ プロジェクトとして設定します。

  3. プロジェクト log4cxx のプロパティ ウィンドウを開き、他の 3 つのプロジェクトを参照として追加します。ここでは、プロパティ -> 共通プロパティ -> フレームワークと参照を参照します。
  4. エラー c2252 が表示された場合は、F7 を押します。これは、LOG4CXX_LIST_DEF 定義エラーが原因であり、その定義に移動して、

#define LOG4CXX_LIST_DEF(N, T) typedef std::vector<T> N

このような、

年:

#define LOG4CXX_LIST_DEF(N, T) \
template class LOG4CXX_EXPORT std::allocator<T>; \
template class LOG4CXX_EXPORT std::vector<T>; \
typedef std::vector<T> N

新着:

#define LOG4CXX_LIST_DEF(N, T) typedef std::vector<T> N
  1. また、insert_iterator に関する別のエラーが発生する場合は、相対ファイルに #include< iterator> を追加するだけです

  2. 終わり!log4cxxをお楽しみください!

于 2016-05-05T16:40:25.287 に答える
4

人々は 2 つのステップで log4cxx を正常に変換しました:

  • オリジナル (VS 6) から VS 2008
  • VS 2008 から VS 2010

ありがたいことに、誰かが log4cxx 0.10 を Visual Studio 2008 プロジェクトとしてhttp://www.dreamcubes.com/webdrive/log4cxx_win32/log4cxx-0.10.0-vc2008-June2008.rarで利用できるようにしました。VS 2010 Express でプロジェクトを正常にビルドしました。

于 2012-05-08T22:54:20.323 に答える