Objective-C с расширениями cpp, я не знаю, что я делаю - PullRequest
0 голосов
/ 23 октября 2009

Так что я все еще чувствую себя новичком, когда странные ошибки выпрыгивают из XCode. Вчера я начал получать это:

___ gxx_personality_v0 ", на который ссылаются: ___ gxx_personality_v0 $ non_lazy_ptr

Это было при создании цели модульного тестирования, которая использовала файл .mm в XCode с iPhoneSDK. Ошибка исчезла, когда я изменил расширение файла обратно на .m , так как я еще не использовал в нем код C ++. (Хотя я планирую.) С моим ограниченным знанием я гуглил и видел других, указывающих, что использовался неправильный компилятор. Другая ссылка ссылается на неправильно установленный флаг. Обладая еще более ограниченными знаниями, я решил, что варианты компоновщика в цели UnitTest - это то, что нужно. Оказывается, для Standard C ++ Library тип по умолчанию установлен на Dynamic . Изменение этого параметра на статическое привело к тому, что моя ошибка исчезла, и теперь мой тест - зеленые полосы ... ошибки ... зеленые кнопки. Я спрашиваю здесь, потому что я до сих пор не знаю точно, что я делаю. Очевидно, что этот параметр влияет на компилятор, но мне нужно больше деталей. Я готовлюсь к еще одной катастрофе в будущем. Какое негативное влияние это окажет, если таковые будут? Почему я не столкнулся с проблемой раньше? Ранее я использовал файлы .mm в модульных тестах, хотя, как мне кажется, я тогда использовал базу кода GoogleToolsForMac для проведения модульного тестирования, где теперь я использую встроенную поддержку XCode для модульного тестирования. Может кто-нибудь объяснить мне?

1 Ответ

0 голосов
/ 10 марта 2010

Краткий ответ: Ошибка возникает из-за того, что вы компилируете код C ++ с драйвером gcc вместо g++.

Более длинный ответ: Когда вы звоните gcc myfile.mm, драйвер GCC достаточно умен, чтобы по расширению файла .mm распознавать, что вы компилируете код Objective-C ++, и поэтому он компилирует его Что ж. Но затем, во время компоновки, если вы все еще используете gcc в качестве драйвера (может быть, вы компилируете и связываете за один шаг?), Он автоматически не связывается в библиотеке стандартного C ++ (и поддерживает объектные файлы), поэтому не может ссылка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...