Почему Leopard калечит некоторые символы с помощью $ non_lazy_ptr? Что еще более важно, что является лучшим методом для исправления неопределенных ошибок символов, потому что символ был искажен с помощью $ non_lazy_ptr?
ответ
От: Developer Connection - Indirect Addressing
Косвенная адресация является имя метода генерации кода, что позволяет символы, определенные в одном файле, чтобы ссылаться из другого файла, не требуя файл реферирования иметь явное знание расположения файла который определяет символ. Следовательно, определяющий файл может быть изменен независимо от файла ссылки. Косвенная адресация минимизирует количество мест, которые должны быть изменены динамическим компоновщиком, что облегчает совместное использование кода и повышает производительность.
Когда файл использует данные, определенные в другом файле, он создает ссылки на символы. Ссылка на символ идентифицирует файл, из которого импортирован символ, и ссылочный символ. Существует два типа ссылок на символы: нелазный и ленивый.
Ссылки на нелазные символы разрешены (привязаны к их определениям) динамическим компоновщиком при загрузке модуля. Символьная символьная ссылка - это, по сути, указатель на символ - кусок данных размера указателя. Компилятор генерирует нелазные ссылки на символы для символов данных или адресов функций.
Личные обозначения символов разрешаются динамическим компоновщиком при первом использовании (не во время загрузки). Последующие обращения к указанному символу переходят непосредственно к определению символа. Личные обозначения символов состоят из указателя символа и символьного заглушки, небольшого количества кода, который непосредственно разделяет и перескакивает через указатель символа. Компилятор генерирует ленивые ссылки на символы, когда он встречает вызов функции, определенной в другом файле.
В человеческом языке: компилятор генерирует заглушки с добавленным к ним $ non_lazy_ptr, чтобы ускорить связывание. Вероятно, вы видите, что функция Foo, ссылающаяся на _Foo $ non_lazy_ptr, не определена, или что-то в этом роде - это не одно и то же. Убедитесь, что символ фактически объявлен и экспортирован в объектные файлы/библиотеки, к которым вы привязываете свое приложение. По крайней мере, это была моя проблема, я также подумал, что это странная линкерная штука, пока я не обнаружил, что моя проблема была в другом месте - в Google есть несколько других возможных причин.
ranlib -c на библиотечный файл исправляет проблему
Если кто-то спотыкается та же проблема, у меня было:
Имел в файле заголовка extern NSString* const someString;
, но забыл поставить его в файл реализации. as NSString* const [email protected]"someString";
Это решило проблему.
ranlib -c libwhatever.a
является надежным решением проблемы. У меня была такая же проблема при создании библиотеки PJSIP для iOS. Эта сортировка библиотеки использует основанную на autoconf систему make, но нуждается в небольшой настройке на различные файлы, чтобы все было хорошо для iOS. В процессе выполнения этого мне удалось удалить строку ranlib в правиле для библиотек, а затем начал получать ошибку в ссылке моего проекта о _PJ_NO_MEMORY_EXCEPTION
, на которую ссылается от _PJ_NO_MEMORY_EXCEPTION$non_lazy_ptr
, который не определен.
Добавление строки ranlib обратно в файл библиотеки разрешило ее. Теперь моя полная запись для LIBS в правилах.mak is
$(LIB): $(OBJDIRS) $(OBJS) $($(APP)_EXTRA_DEP)
if test ! -d $(LIBDIR); then $(subst @@,$(subst /,$(HOST_PSEP),$(LIBDIR)),$(HOST_MKDIR)); fi
$(LIBTOOL) -o $(LIB) $(OBJS)
$(RANLIB) -c $(LIB)
Надеюсь, что это поможет другим, а также пытается использовать общие внешние библиотеки UNIX с iPhone или iOS.
- 1. Может ли Mac OSX 10.5 (Leopard) запускать 64-битные процессы?
- 2. Различия между запасом Apache на OS X 10.5 Leopard и OS X 10.5 Leopard Server?
- 3. Компиляция PHP-GD на Mac OSX 10.5
- 4. компилировать приложение для osx 10.5
- 5. X11 библиотеки в OSX 10.5?
- 6. приложение, не работающее с OSX 10.5
- 7. C++ symbol mangling and exporting => Разрешить дублирование кода?
- 8. My NSSavePanel не сохраняет файл. (OSX 10.5)
- 9. Удалить pysvn в Mac OSX 10.5
- 10. Обновление SVN под моим Mac OSX 10.5
- 11. Запуск/компиляция jdbc-sqlite на OSX 10.5
- 12. Разработка контекстного меню для OSX (Leopard and Snow Leopard)
- 13. Установка numpy на mac osx (snow leopard)
- 14. Функциональность MenuKey в OSX 10.5 и 10.6?
- 15. backporting NSWindowDelegates windowDidEndLiveResize поведение в OSX 10.5?
- 16. Установить RVM на Mac OSX 10.5
- 17. компилирование JVMTI агента (с помощью GCC на OSX Snow Leopard)
- 18. Может ли XCode 3.2 работать на 10.5 Leopard?
- 19. OSX dyld: lazy symbol binding failed: Symbol not found: _mysql_get_client_info
- 20. Как установить MySQL на Leopard, Mac OS X 10.5?
- 21. $ Ошибка ссылки non_lazy_ptr с переменными версии agvtool?
- 22. Как настроить PEAR на Mac OS X 10.5 Leopard
- 23. §non_lazy_ptr iphone sdk 3.0
- 24. Здание для 10.5 в Xcode 3.2 (на Snow Leopard) error
- 25. Невозможно установить Qt 4.8 под OS X Leopard (10.5)
- 26. Может ли Ruby on Rails 3.0 работать на Mac OS X Leopard 10.5? (вместо Snow Leopard)
- 27. OSX Leopard - дроссель общий доступ в Интернет
- 28. Строительство EmguCV на OSX Snow Leopard
- 29. Как установить Glade в Mac OSX Leopard
- 30. ImageMagick OSX Snow Leopard плохой тип процессора