Динамический компоновщик - как найти пропущенный символ - PullRequest
3 голосов
/ 13 декабря 2011

Моя программа работает нормально на OS X 10.6, но не работает на 10.5 с ошибкой:

dyld: lazy symbol binding failed: Symbol not found: 
__ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l 

Конечно, у меня нет ничего загадочного в моем программном обеспечении.

Как мне выяснить, какую функцию я вызываю, а какой нет в библиотеках 10.5?

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Используйте команду c++filt для определения имени отсутствующей функции.

В вашем случае это std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)

1 голос
/ 13 декабря 2011

Как было сказано dasblinkenlight, c++filt - это команда, используемая для декодирования "искаженных имен".

Проблема, похоже, заключается в том, что детали реализации библиотеки C ++, вероятно, изменились с 10.6, иКуд, который использует стандартную библиотеку и скомпилирован для 10.6, просто не совместим с 10.5.

Я помню, что Apple выпустила обновление 10.3.9 в основном для обеспечения совместимости с программами, скомпилированными для 10.4.x;может быть, они сделали то же самое для 10,5 / 10,6.Ваша система 10.5 использует последнюю версию?

Если вы хотите быть абсолютно уверены, что ваша программа работает на 10.5, даже если вы собираете ее на 10.6, скажите XCode использовать SDK 10.5 для ее сборки.

...