Построение 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
- Я рекомендую вам установить 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
-
и u встретит другое err о insert_iterator, просто добавьте # include <iterator> в относительный файл
-
Готово! наслаждайтесь своим 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" в конце целевого имени.