2011-12-11 49 views
11

這讓我瘋狂,我試圖構建log4cxx庫,以便在我一直使用的C++項目中使用。我在運行VS2010 express C++版本的win7主機上運行。我遵循每個log4cxx方向()的指示(包括下載apr 和apr-util並且啓動.hw文件,但不幸的是,當我嘗試加載log4cxx.dsw解決方案並將其轉換爲當前VS時,我收到一個錯誤,試圖構建apr.apr/dsw和一堆其他相關的.dsw文件。有什麼建議麼?在vs 2010中構建log4cxx C++

具體來說,我所看到的是:

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. 

感謝

的文件是在正確的路徑。

+0

那麼以後的視覺工作室比2010年呢?有沒有更簡單的路徑? –

回答

22

你必須遵循這些步驟獲得log4cxx(版本0.10.0)與VS2010的工作:

  1. here
  2. 下載下載最新的log4cxx包APR和APR-util的ZIP包從here
  3. 提取log4cxx,APR UND APR-UTIL到同一目錄
  4. 重命名apr_VERSION和APR-util_VERSION夾到APR和產生一個目錄具有三個文件夾APR-util的:Apache的log4cxx-0.10.0,APR和月 - UTIL
  5. 更改到log4cxx目錄並執行configure.bat
  6. 更改爲APR-UTIL /包括direcotry和開放apu.hw在您選擇
  7. 的文本編輯找到條目#define APU_HAVE_APR_ICONV,將其設置爲0並保存文件
  8. 從同一目錄打開apr_ldap.hw,找到條目#define APR_HAS_LDAP,將其設置爲0並保存文件。
  9. 更改爲log4cxx/projects目錄並使用VS2010打開log4cxx.dsw。答VS2010的轉換提示是/確定每個項目(APR,APR-util的,log4cxx,XML)

好吧,如果你打,現在建立,那麼你將看到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; 
  • 如果編譯器抱怨在命名空間std不是insert_iterator,添加#include <iterator>到源文件包括一節。

  • 最後但並非最不重要的,在log4cxx項目右鍵單擊並選擇添加引用,然後選擇其他3個項目作爲參考


希望這有助於你和其他一些人:) ...如果您需要整個解決方案或其他文件,請告訴我!

我想通了這些步驟由Lex李this博客條目的巨大幫助。

編輯: 你可以從我的Dropbox的下載我的VS2010的解決方案和源代碼: https://www.dropbox.com/s/rn5d0044jzgzwyf/log4cxx_vs2010.7z

+0

是log4cxx一個死的項目? –

4

第1章正式步驟

我們要在這裏遵循的步驟,http://logging.apache.org/log4cxx/building/vstudio.html。但是,我們必須做出改變以適應窗口/ VS201 *。

  1. 下載更新版本的log4cxx,它是apache log4cxx 0。10從這裏開始,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 
  • 我推薦你在開發人員的機器上安裝gow,那麼你會有很多unix/linux的工具,非常方便。或者如果你有git,你可以在你的env中添加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. 按F7鍵,如果你看到錯誤c2252,這是因爲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 
    
  • 和u會遇到另一個ERR約insert_iterator,根本的#include <迭代器>添加到相對文件

  • 完成!享受你的log4cxx!

  • 0

    在Windows 7上建立log4cxx 64位與Visual Studio 2015年,我不得不這樣做除了斯科特的回答了幾步,並有一些澄清。

    1. here下載最新的log4cxx(apache 0.10.0)ZIP包。
    2. here下載apr和apr-util ZIP包。
    3. 將log4cxx,apr和apr-util提取到相同的目錄。
    4. 從官方的說明和seveves的回答是: 重命名apr_VERSION和APR-util_VERSION文件夾APR和APR-util的導致目錄中有三個文件夾:Apache的log4cxx-0.10.0,APR和APR-util的
    5. 從Visual Studio命令行,cd到log4cxx目錄並執行「configure」。如果你正在嘗試將它用於下一步,這將無法從git bash shell中運行。
    6. 下一個腳本需要SED,讓你有一些選擇:
      • 手動編輯在其他的答案中描述的文件。
        • 更改爲apr-util/include目錄並在您選擇的文本編輯器中打開apu.hw。找到條目#define APU_HAVE_APR_ICONV,將其設置爲0並保存該文件。從同一個目錄打開apr_ldap.hw並找到條目#define APR_HAS_LDAP,並將其設置爲0並保存該文件。
      • 從GNUWin32安裝sed並將其添加到PATH,然後從Windows命令提示符的log4cxx目錄運行「configure-aprutil」。
      • 通過從Git Bash提示符的log4cxx目錄運行「configure-aprutil」來使用Windows git安裝附帶的sed。
    7. 打開Visual Studio 2015.從項目目錄打開項目log4cxx.dsw。讓Visual Studio將其轉換。
    8. 設置log4cxx爲啓動項目,並檢查其他3個項目顯示爲依賴(右鍵 - >編譯依賴 - >項目依賴)
    9. 現在我有三個項目的展示了「(Visual Studio中2010)「旁邊。這是由於在標準輸入輸出的變化引起的鏈接錯誤後:

      4>apr-1.lib(start.obj) : error LNK2001: unresolved external symbol __imp__wenviron 4>apr-1.lib(start.obj) : error LNK2001: unresolved external symbol __imp__environ 4>apr-1.lib(filedup.obj) : error LNK2019: unresolved external symbol __imp___iob_func referenced in function apr_file_dup2

      改變這種通過轉到屬性爲每個項目和改變「平臺工具集」爲所有配置到Visual Studio 2015年

    10. 該解決方案現在配置爲32位。轉到生成>配置管理器。將平臺更改爲x64。三個項目將改變,但log4cxx仍然說Win32。點擊它並轉到新建...添加x64並取消選中「創建新的解決方案平臺」。點擊確定。確保爲所有4個項目選中了「Build」。
    11. 如果您現在構建,您將看到c2252模板錯誤。打開log4cxx.h
      • 將包含"#if defined(_MSC_VER) && !defined(LOG4CXX_STATIC) && defined(LOG4CXX)"的行更改爲"#if defined(_MSC_VER) && _MSC_VER < 1700 && !defined(LOG4CXX_STATIC) && defined(LOG4CXX)"
      • 將包含"#elif defined(_MSC_VER) && !defined(LOG4CXX_STATIC)"的行更改爲"#elif defined(_MSC_VER) && _MSC_VER < 1700 && !defined(LOG4CXX_STATIC)"
    12. 下一個錯誤將是關於insert_iteratorstringhelper.cpp。將#include <iterator>添加到該文件。
    13. 然後有一個鏈接錯誤:

      apr-1.lib(rand.obj) : error LNK2019: unresolved external symbol __imp__UuidCreate

      爲了解決這個問題,去log4cxx屬性>鏈接>輸入,並添加rpcrt4.lib

    14. 現在的解決方案應建立並與該圖書館將鏈接到您的64位應用程序。如果您只編輯一個,請重複調試/發佈配置。

    15. (可選)該解決方案不會將通用「d」後綴添加到調試庫。要添加它,請打開Debug配置的屬性。轉到鏈接器>常規>輸出文件並重置爲默認值。轉到鏈接器>高級>導入庫並重置爲默認值。對發佈配置也這樣做,以便它們將構建到相應的目錄。只有調試配置,轉到常規,並在目標名稱的末尾添加「d」。