Ответ 1
Довольно просто подумал, как избавиться от сотен предупреждений: для всей цели или проекта с настройкой сборки Символы, скрытые по умолчанию, чтобы ДА
Я использую платформу 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 предупреждения! Поэтому мое решение действительно сработало!
Довольно просто подумал, как избавиться от сотен предупреждений: для всей цели или проекта с настройкой сборки Символы, скрытые по умолчанию, чтобы ДА
Если boost включается несколькими проектами, каждый проект должен иметь одинаковые значения для
Symbols Hidden by Default
Inline Methods Hidden
Компонент жалуется на разные настройки видимости между вашим проектом и Boost.
Вы также можете исправить эту проблему, перекомпилировав Boost с теми же настройками совместимости.
Просто добавьте
cxxflags=-fvisibility=hidden
и
cxxflags=-fvisibility-inlines-hidden
в командной строке bjam
.
Если boost включается несколькими проектами, каждый проект должен иметь одинаковые значения для
Символы, скрытые по умолчанию Встроенные методы скрыты
nerith said is right, но в Xcode 4.6.3 они не являются вышеуказанными "Символами, скрытыми по умолчанию" и "Inline Methods Hidden", и я установил gcc_symbols_private_extern в yes, предупреждение исчезнет.
У меня также была эта проблема.
Оказывается, я небрежно делал что-то вроде этого:
#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