XCode .m против.mm
В проекте zxing iphone файл readme гласит:
- Может случиться так, что при попытке создать свой собственный проект с ZXingWidgetController вы получите ошибки компоновщика, такие как "неопределенная ссылка на". Если эта ошибка выглядит как неопределенная ссылка на C++, то переименование main.m в main.mm (исходный суффикс Objective-C++) может решить проблему
Это действительно так. Но мне интересно, почему?
1 ответ
Решение
Расширение.mm означает Objective-C++, когда компилятор может обрабатывать классы C++. Но при использовании расширения.m он сможет компилировать только код C без классов C++.
Обе .m
а также .mm
являются расширениями файлов классов исходного кода для приложений Mac. .m
файлы могут содержать классы Objective-C и Objective-C++. Чтобы избежать конфликтов между ними в сценариях смешанного использования, существует соглашение о переименовании всех файлов классов Objective-C++ в.mm
. Это помогает компиляторам различать.
Итак, в проекте, который использует как Objective-C, так и Objective-C++, вы увидите:
.m
файлы, содержащие Objective-C.mm
файлы, содержащие Objective-C++