Как устранить ошибку ссылки на один символ при динамическом связывании проекта XCode с библиотекой lib4cxx?

Я пишу в C ++ под XCode 4.6 на Mountain Lion. Я пытаюсь добавить и использовать библиотеку Apache log4cxx. Я установил библиотеку сегодня утром с помощью Brew. Я ссылаюсь на liblog4cxx.dylib. Я получаю сообщение об ошибке, что не может быть найден только один символ:

Неопределенные символы для архитектуры x86_64:
«log4cxx :: Logger :: forcedLog (log4cxx :: хелперы :: ObjectPtrT
Const&, std :: __ 1 :: basic_string,
std :: __ 1 :: allocator> const&, log4cxx :: spi :: LocationInfo const&)
const «, ссылка на которую:

Я знаю, что он находит файл библиотеки, потому что, если я удаляю его, я получаю гораздо больше неопределенных ошибок символов, связанных с log4cxx.

соответствующий код в основном:

#include <log4cxx/logger.h>

static LoggerPtr  logger(log4cxx::Logger::getLogger("foo.bar.Baz"));

void foo(int p1, int p2)
{
LOG4CXX_WARN(logger, "blah blah blah");
}

Создание объекта функции регистрации внутри функции, как статического, так и нет, не меняет поведение. Кроме того, связь со статической библиотекой, с определением или без определения LOG4CXX_STATIC в моем проекте, не меняет поведение.

Глядя на макрос, который я вызываю, я вижу, что этот символ является фактическим методом, который выполняет операцию регистрации. Если убрать вызов регистрации, но оставить в коде, который определяет объект регистратора, код связывается нормально, как вы могли ожидать.

Что мне нужно сделать, чтобы разрешить этот последний символ?

ТИА!

1

Решение

Я проследил свою проблему до компиляции библиотеки не компилятором C ++ 11, но тогда моим целевым проектом был компилятор C ++ 11.

Мне удалось скомпилировать log4cxx в компиляторе C + 11, просмотрев изменения в log4cxx в git-репозитории разработки, который в основном состоял из вставки static_casts, как в этом обновлении:

http://apache-logging.6191.n7.nabble.com/C-11-does-not-allow-char-literals-with-highest-bit-set-unless-cast-td34908.html

Я полагаю, что несколько несовместимых подпрограмм оказались неопределенными, поэтому нас запутали только несколько, казалось бы, случайных неопределений. (Или я все равно был)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]