Символ повышения не найден - PullRequest
7 голосов
/ 14 февраля 2012

Я пытаюсь скомпилировать / перенести более старую версию OpenOffice. Он использует Boost v1.34.1, который является частью исходного дерева. Сообщение об ошибке выглядит следующим образом:

Undefined symbols:
  "boost::throw_exception(std::exception const&)", referenced from:
      boost::detail::shared_count::shared_count<ScToken>(ScToken*)in detfunc.o
ld: symbol(s) not found

Повышение является новым для меня, и я не смог найти много онлайн, чтобы помочь мне понять это. Из сообщения об ошибке я понимаю, что мне, вероятно, нужно связать библиотеку. Однако boost::throw_exception определено в заголовочном файле без соответствующей библиотеки (которую я могу найти). Просто для удовольствия, я попробовал #include <boost/throw_exception.hpp> в detfunc и использовал символические ссылки, чтобы поместить файл заголовка в тот же каталог без удачи.

Есть ли библиотека, с которой я должен связать -l или путь включения с -I? Как я должен получить ссылку на этот символ в?

1 Ответ

13 голосов
/ 02 марта 2012

Boost ожидает, что проект будет построен с помощью макроса BOOST_NO_EXCEPTIONS undefined или определит саму функцию boost::throw_exception.

Начиная с <boost/throw_exception.hpp> в версии 1.34.1:

namespace boost
{

#ifdef BOOST_NO_EXCEPTIONS

void throw_exception(std::exception const & e); // user defined

#else

//[Not user defined --Dynguss]
template<class E> inline void throw_exception(E const & e)  
{
    throw e;
}

#endif

} // namespace boost

Заголовки конфигурации Boost будут определять, определять макрос или нет.Похоже, это сводится к компилятору, который вы используете, но могут быть и другие факторы.Посмотрите в папке boost/config/compiler/ заголовочный файл, соответствующий вашему компилятору, затем найдите в нем BOOST_NO_EXCEPTIONS.Вокруг #define должны быть некоторые условия, помогающие объяснить, когда Boost его определяет.Возможно, вам удастся настроить сборку, чтобы избежать определения и избежать ошибки компоновщика, с которой вы столкнулись.

Если вы не можете изменить конфигурацию компилятора, чтобы избежать определения, то, вероятно, вы ушлиопределяя boost::throw_exception(std::exception const & e) себя где-то в коде OpenOffice.Однако я не знаком с этим кодом, поэтому не могу дать четкого предложения, куда он должен идти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...