Ошибка компоновщика: iPhone Unit Test Bundle, ссылающийся на классы Приложения

Рассмотрение этого было отмечено со "взламыванием", я подозреваю "переполнение стека", к которому он обращается, переполнение стека вызовов, а не высокоуровневое переполнение стека, такое как те, на которых ссылаются в большинстве других ответов здесь. Это действительно не относится ни к каким управляемым или интерпретируемым средам, таким как.NET, Java, Python, Perl, PHP, и т.д., в котором обычно пишутся веб-приложения, таким образом, Ваш единственный риск является самим веб-сервером, который, вероятно, записан в C или C++.

Выезд этот поток:

https://stackoverflow.com/questions/7308/what-is-a-good-starting-point-for-learning-buffer-overflow

10
задан ohhorob 13 November 2009 в 06:47
поделиться

2 ответа

Я нашел ответ, но я думаю, что должен быть «лучший» способ?

В конфигурации сборки для пакета Unit Tests вы можете указать Bundle Loader ( BUNDLE_LOADER ) параметр, указывающий на ваше «хост-приложение».

${TARGET_BUILD_DIR}/AppName.app/AppName

Пакет модульных тестов создается как зависимость от цели модульного тестирования вашего приложения (скажем, AppName Testing ), и в результате мне не удалось разрешить исполняемый файл приложения лучше, чем указано выше.

Конечный результат - это рабочий модульный тест, введенный в цель тестирования без каких-либо ошибок компоновщика. Тесты запускаются и получают доступ к классам, как ожидалось.

РЕДАКТИРОВАТЬ: Bundle Loader - Target Configuration

Важно настроить цель, которая является «хостингом» пакет тестирования не скрывает символы.

GCC_SYMBOLS_PRIVATE_EXTERN = NO

он же «Символы, скрытые по умолчанию». Из документации:

При включении все символы объявляются "частный внешний" , если явно не указано иное помечены для экспорта с помощью '__ attribute __ ((visibility ("default")))' в коде. Если не включен, все символы экспортируются, если явно не отмечены как 'private extern' .

Для получения дополнительной информации см. http://developer.apple.com/documentation/DeveloperTools/Conceptual/CppRuntimeEnv/Articles/SymbolVisibility.html .

18
ответ дан 3 December 2019 в 20:05
поделиться

Я только что ответил на это здесь:

Юнит-тестирование iPhone: Символы не найдены при вызове пользовательского кода

Я полагаю, что одна из этих тем должна быть закрыта как дубликат? Я не достаточно авторитетен, чтобы сделать это...


Я также следовал документу Apple "Приложения для модульного тестирования iPhone" и при попытке модульного тестирования одного из моих классов увидел ошибку связывания, похожую на описанную в вопросе.

Похоже, что любой класс, на который ссылается класс вашего модульного теста и который запускается из тестовой цели, также должен быть добавлен в эту тестовую цель. Для этого щелкните правой кнопкой мыши на классе RootViewController и нажмите 'Get Info' (сочетание клавиш Cmd-i). На панели целей убедитесь, что ваша цель модульного теста (например, 'LogicTests', если вы следовали именованию в этом документе) отмечена.

Теперь этот класс будет скомпилирован с вашими тестами и должен быть доступен вашему модульному тесту. Чтобы проверить еще раз, разверните узел 'Targets/LogicTests/Compile Resources' в браузере 'Groups & Files' слева. Здесь перечислены все файлы классов, доступные при сборке цели, и теперь они должны включать ваш класс модульного теста вместе с тестируемым классом.

(Обратите внимание, что вам нужно будет аналогичным образом выбрать все соответствующие цели при создании нового приложения или тестового класса - на той же странице окна 'New File...', когда вы присваиваете имя файлу).

(Кстати, я использую XCode 3.2.3 и OS 4.0).

1
ответ дан 3 December 2019 в 20:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: