Построение log4cxx в vs 2010 С++

Это сводит меня с ума, я пытаюсь создать библиотеку log4cxx для использования в проекте С++, который я использовал. Я нахожусь на хосте win7, который запускает версию VS2010 express С++. Я следил за указаниями в направлениях log4cxx(), включая загрузку apr и apr-util и мотивировать файлы .hw, но, к сожалению, когда я пытаюсь загрузить решение 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.

Спасибо

Файлы находятся на правильном пути.

Ответ 1

Вы должны выполнить следующие шаги, чтобы получить log4cxx (Version 0.10.0), работающий с VS2010:

  • Загрузите последний пакет log4cxx из здесь
  • Загрузите пакеты apr и apr-util ZIP из здесь
  • Извлеките log4cxx, apr и apr-util в тот же каталог
  • Переименуйте папку apr_VERSION и apr-util_VERSION в apr и apr-util, в результате получим каталог с тремя папками: apache-log4cxx-0.10.0, apr и apr-util
  • Перейдите в каталог log4cxx и выполните configure.bat
  • Перейдите в apr-util/include directcotry и откройте apu.hw в текстовом редакторе по вашему выбору.
  • Найти запись #define APU_HAVE_APR_ICONV, установить ее в 0 и сохранить файл
  • Откройте apr_ldap.hw из того же каталога и найдите запись #define APR_HAS_LDAP, установите ее в 0 и сохраните файл.
  • Перейдите в каталог log4cxx/projects и откройте log4cxx.dsw с помощью VS2010. Ответьте на приглашения конвертации VS2010 с да /ok для каждого проекта (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;
  • Если компилятор жалуется на то, что insert_iterator не находится в пространстве имен std, добавьте #include <iterator> в раздел include исходного файла.

  • И наконец, щелкните правой кнопкой мыши проект log4cxx и выберите Добавить ссылки и выберите другие 3 проекта в качестве ссылки


Надеюсь, это поможет вам и некоторым другим:)... если вам нужно все решение или другие файлы, дайте мне знать!

Я выяснил эти шаги с огромной помощью этой записи в блоге от Lex LI.

EDIT: Вы можете загрузить мое решение VS2010 и исходный код из моего Dropbox: https://www.dropbox.com/s/rn5d0044jzgzwyf/log4cxx_vs2010.7z

Ответ 2

Люди успешно преобразовали log4cxx в 2 этапа:

  • оригинал (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.

Ответ 3

Глава 1 Официальные шаги

Мы собираемся выполнить следующие шаги: http://logging.apache.org/log4cxx/building/vstudio.html. Однако мы должны внести изменения в адаптацию к окнам /VS 201 *.

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 в свой env.
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

  • Теперь нам нужно преобразовать *.dsw в *.cxproj. Чтобы сделать его гладким, просто запустите Visual Studio 201 * и откройте log4cxx.dsw. VS спросит, хотите ли вы преобразовать все. Просто нажмите "Да".

  • Установите log4cxx в качестве проекта запуска.

  • Откройте окно свойств проекта log4cxx, добавьте еще 3 проекта в качестве ссылок, здесь: свойства → общие свойства → рамки и ссылки.
  • Хит 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
  1. и u встретит другое err о insert_iterator, просто добавьте # include <iterator> в относительный файл

  2. Готово! наслаждайтесь своим log4cxx!

Ответ 4

Чтобы построить log4cxx на 64-разрядной версии Windows 7 с Visual Studio 2015, мне пришлось сделать несколько шагов в дополнение к ответу Скотта и получить некоторые пояснения.

  • Загрузите последний почтовый пакет log4cxx (apache 0.10.0) из здесь.
  • Загрузите ZIP-пакеты apr и apr-util из здесь.
  • Извлеките log4cxx, apr и apr-util в тот же каталог.
  • Из официальных инструкций и seveves ответьте: Переименуйте папку apr_VERSION и apr-util_VERSION в apr и apr-util, в результате получим каталог с тремя папками: apache-log4cxx-0.10.0, apr и apr-util
  • Из командной строки Visual Studio, cd в каталог log4cxx и выполните "configure". Это не будет работать с оболочкой git bash, если вы попытаетесь использовать ее для следующего шага.
  • Следующий script требует sed, поэтому у вас есть несколько вариантов:
    • Отредактируйте файлы вручную, как описано в других ответах.
      • Перейдите в каталог apr-util/include и откройте apu.hw в текстовом редакторе по вашему выбору. Найдите запись #define APU_HAVE_APR_ICONV, установите ее в 0 и сохраните файл. Откройте apr_ldap.hw из того же каталога и найдите запись #define APR_HAS_LDAP, установите ее в 0 и сохраните файл тоже.
    • Установите sed из GNUWin32 и добавьте его в свой PATH, затем запустите "configure-aprutil" из каталога log4cxx из командной строки Windows.
    • Используйте команду sed, которая поставляется с установкой Windows git, запустив "configure-aprutil" из каталога log4cxx из приглашения git bash.
  • Откройте Visual Studio 2015. Откройте проект log4cxx.dsw из каталога проектов. Пусть Visual Studio преобразует его.
  • Задайте log4cxx как проект запуска и проверьте, что другие 3 проекта отображаются как зависимости (щелкните правой кнопкой мыши → Build Dependencies → Project Dependencies)
  • Теперь у меня было три проекта, которые появились рядом с ними ( "Visual Studio 2010" ). Это вызвало ошибку связи позже из-за изменений в stdio:

    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.

  • Теперь решение настроено для 32-битного. Откройте "Сборка" > "Диспетчер конфигурации". Измените платформу на x64. Три проекта будут меняться, но log4cxx все еще говорит Win32. Нажмите на это и перейдите в New... Добавьте x64 и снимите флажок "Создать новую платформу решений". Нажмите "ОК". Убедитесь, что "Build" проверен для всех 4 проектов.
  • Если вы построите сейчас, вы увидите ошибки шаблона 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)".
  • Следующая ошибка будет примерно insert_iterator в stringhelper.cpp. Добавьте #include <iterator> к этому файлу.
  • Затем возникает ошибка ссылки:

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

    Чтобы исправить это, перейдите в log4cxx Properties > Linker > Input и добавьте rpcrt4.lib

  • Теперь решение должно быть построено, а библиотека будет ссылаться на ваше 64-битное приложение. Повторите для конфигураций Debug/Release, если вы только редактируете их.

  • (Необязательно) Решение не добавляет общий "d" суффикс в библиотеку отладки. Чтобы добавить его, откройте "Свойства для конфигурации отладки". Перейдите в Linker > General > Output file и reset по умолчанию. Перейдите в Linker > Advanced > Import Library и reset по умолчанию. Сделайте это и для конфигурации Release, чтобы они соответствовали соответствующим каталогам. Только для конфигурации Debug перейдите к разделу "Общие" и добавьте "d" в конце целевого имени.