Подтвердить что ты не робот

Xcode с boost: linker (Id) Предупреждение о настройках видимости

Я использую платформу boost из приведенной ниже ссылки для моего проекта iPhone Xcode: https://goodliffe.blogspot.com/2010/09/building-boost-framework-for-ios-iphone.html

он отлично работает, но я всегда получаю сотни ссылок Apple Mach-O Linker (id):

Прямой доступ в __ZN5boost15program_options6detail7cmdline24handle_additional_parserERSt6vectorISsSaISsEE к глобальному слабому символу __ZTVN5boost17bad_function_callE означает, что слабый символ не может быть переопределен во время выполнения. Вероятно, это вызвано тем, что разные единицы перевода скомпилированы с различными настройками видимости.

Как избавиться от этих предупреждений в коде?

отредактирован: Установив Символы, скрытые по умолчанию= YES, мне удалось избавиться от большинства предупреждений, но есть еще три левых, которые не исчезнут, может ли кто-нибудь сказать мне, почему?

снова отредактирован: После восстановления осталось еще 3 предупреждения! Поэтому мое решение действительно сработало!

4b9b3361

Ответ 1

Довольно просто подумал, как избавиться от сотен предупреждений: для всей цели или проекта с настройкой сборки Символы, скрытые по умолчанию, чтобы ДА

Ответ 2

Если boost включается несколькими проектами, каждый проект должен иметь одинаковые значения для

 Symbols Hidden by Default
 Inline Methods Hidden

Ответ 3

Компонент жалуется на разные настройки видимости между вашим проектом и Boost.

Вы также можете исправить эту проблему, перекомпилировав Boost с теми же настройками совместимости.

Просто добавьте

cxxflags=-fvisibility=hidden

и

cxxflags=-fvisibility-inlines-hidden

в командной строке bjam.

Ответ 4

Если boost включается несколькими проектами, каждый проект должен иметь одинаковые значения для

Символы, скрытые по умолчанию  Встроенные методы скрыты

nerith said is right, но в Xcode 4.6.3 они не являются вышеуказанными "Символами, скрытыми по умолчанию" и "Inline Methods Hidden", и я установил gcc_symbols_private_extern в yes, предупреждение исчезнет.

Ответ 5

У меня также была эта проблема.

Оказывается, я небрежно делал что-то вроде этого:

#pragma GCC visibility push(default)
#include <SomeExternalLibrary.h>
void myExampleSymbol();
#pragma GCC visibility pop

Что я решил, изменив на:

#include <SomeExternalLibrary.h>
#pragma GCC visibility push(default)
void myExampleSymbol();
#pragma GCC visibility pop