сборка log4cxx vs 2010 c ++ - PullRequest
       10

сборка log4cxx vs 2010 c ++

11 голосов
/ 11 декабря 2011

Это сводит меня с ума, я пытаюсь собрать библиотеку log4cxx для использования в проекте c ++, который я использую. Я работаю на хосте win7 под управлением VS2010 Express C ++ Edition. Я следовал указаниям в соответствии с инструкциями log4cxx (), включая загрузку апреля и 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.

затем в поле вывода в ВК:

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 ]

23 голосов
/ 09 ноября 2012

Необходимо выполнить следующие шаги, чтобы log4cxx (версия 0.10.0) работала с VS2010:

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

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


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

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

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

4 голосов
/ 05 мая 2016

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

Мы собираемся выполнить следующие шаги, http://logging.apache.org/log4cxx/building/vstudio.html. Однако мы должны внести изменения, чтобы адаптироваться к Windows / 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
  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. Нажмите 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. и вы встретите еще одну ошибку насчет insert_iterator, просто добавьте #include в относительный файл

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

4 голосов
/ 09 мая 2012

Люди успешно преобразовали 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.

0 голосов
/ 23 февраля 2017

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

  1. Загрузите последнюю версию ZIP-пакета log4cxx (apache 0.10.0) из здесь .
  2. Загрузите ZIP-пакеты apr и apr-util с здесь .
  3. Извлеките log4cxx, apr и apr-util в один и тот же каталог.
  4. Из официальных инструкций и нескольких ответов: Переименуйте папки apr_VERSION и apr-util_VERSION в apr и apr-util, получив каталог с тремя папками: apache-log4cxx-0.10.0, apr и apr-util
  5. Из командной строки Visual Studio перейдите в каталог log4cxx и выполните команду «configure». Это не будет работать из оболочки git bash, если вы пытаетесь использовать это для следующего шага.
  6. Следующий скрипт требует 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, поставляемый с установкой git для Windows, запустив «configure-aprutil» из каталога log4cxx из приглашения Git Bash.
  7. Откройте Visual Studio 2015. Откройте проект log4cxx.dsw из каталога проектов. Пусть Visual Studio преобразует его.
  8. Установите log4cxx в качестве запускаемого проекта и убедитесь, что остальные 3 проекта отображаются как зависимости (Щелкните правой кнопкой мыши -> Зависимости сборки -> Зависимости проекта)
  9. Теперь у меня появилось три проекта с надписью "(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.

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

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

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

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

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