Вопрос:

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

c++ xcode boost warnings

14404 просмотра

6 ответа

3579 Репутация автора

Я использовал платформу повышения по ссылке ниже для моего проекта 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, которые не исчезнут, кто-нибудь может сказать мне, почему?

снова отредактировано: после перестройки оставшиеся 3 предупреждения также исчезли! Так что мое решение сработало!

Автор: Gob00st Источник Размещён: 30.12.2011 11:33

Ответы (6)


24 плюса

3579 Репутация автора

Решение

Доу только что подумал, как избавиться от сотен предупреждений, как это: установить для всей цели или проекта с настройкой сборки Symbols Hidden by Default значение YES

Автор: Gob00st Размещён: 30.12.2011 11:40

35 плюса

1740 Репутация автора

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

 Symbols Hidden by Default
 Inline Methods Hidden
Автор: cyrilchampier Размещён: 09.08.2012 08:21

1 плюс

11 Репутация автора

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

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

Нерит сказал, что это правильно, но в Xcode 4.6.3 они не являются приведенными выше «Символами, скрытыми по умолчанию» и «Скрытые встроенные методы», и я установил для gcc_symbols_private_extern значение yes, предупреждение исчезнет.

Автор: Samuel Lu Размещён: 15.10.2013 09:12

4 плюса

8626 Репутация автора

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

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

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

cxxflags=-fvisibility=hidden

а также

cxxflags=-fvisibility-inlines-hidden

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

Автор: Benoit Blanchon Размещён: 05.01.2015 03:28

0 плюса

380 Репутация автора

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

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

#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
Автор: OLL Размещён: 12.01.2015 04:00

1 плюс

2902 Репутация автора

Установка символов, скрытых по умолчанию в NO, и встроенные методы, скрытые в NO, сработали для меня. Нет необходимости добавлять какой-либо флаг в другие флаги C ++

Автор: Desert Rose Размещён: 23.08.2018 12:17
Вопросы из категории :
32x32