Это связано с видимостью символов в скомпилированных вами библиотеках.Параметр GCC 4.0 -fvisibility = hidden предназначен для скрытия символов для библиотек DSO / общих объектов, чтобы сократить время соединения / загрузки.Тем не менее, я видел некоторые блоги онлайн, использующие этот переключатель каким-то своеобразным образом при компиляции статических библиотек.На самом деле я не смог выяснить, каков эффект или цель этого.Насколько мне известно, статические библиотеки нуждаются в информации о символах для функций, которые вы собираетесь использовать извне.
Я столкнулся с той же ошибкой компоновщика с boost :: exceptions.Однако, чтобы перехватить исключения определенного типа, GCC требует информацию о типе, но это проблема времени выполнения.Таким образом, даже если он правильно компилируется / связывается, сокрытие информации о символах в ваших проектах является , а не правильным решением, если вы собираетесь перехватить исключение из-за пределов библиотеки.См. Документацию Apple:
Если ваш символ использует информацию идентификации типов времени выполнения (RTTI), исключения или динамическое приведение для объекта, определенного в другой библиотеке, ваш символ должен быть видимым, если он ожидает обработкизапросы, инициированные другой библиотекой.Например, если вы определяете обработчик перехвата для типа в стандартной библиотеке C ++ и хотите перехватывать исключения этого типа, генерируемые стандартной библиотекой C ++, вы должны убедиться, что ваш объект typeinfo видим.
Источник: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/CppRuntimeEnv/Articles/SymbolVisibility.html
Мне действительно нужно было изменить заголовок исключения с помощью макросов, описанных здесь, чтобы мой проект компилировался и связывался: http://gcc.gnu.org/wiki/Visibility. Этобыл необходим даже с -fvisibility = default, что заставляет меня поверить, что это была какая-то ошибка компоновщика.
Тем не менее, я зарегистрировал ошибку против Boost здесь: https://svn.boost.org/trac/boost/ticket/4594#comment:11
Вы можете найти мойКонфигурация здесь: http://lists.boost.org/boost-users/2011/07/69251.php