Длинная версия: я хочу реализовать свою модель приложения в C++ и использовать эту модель везде, где Cocos2d-x использует C++, чтобы: (1) я знаю, что она имеет ту же версию C++ и (2) Когда придет время, я смогу удалить свою модель приложения из Cocos2d-x. Я начинаю работать с Mac OS X и iOS, и я стараюсь, чтобы все было скомпилировано до того, как я отправился в этот проект. На iOS все работает отлично. На Mac основной C++ дает мне ошибку компоновщика каждый раз!
Начало короткой версии: у меня есть класс C++, который выглядит следующим образом:
class GetInteger {
public:
static int GetInt();
};
Пока все хорошо, так позвольте мне продолжить и определить мою сверхсложную статическую функцию:
int GetInteger::GetInt()
{
return 5;
}
Хорошо, что основной C++, теперь я собираюсь пойти и использовать свою функцию супер-усложнения:
"include "GetInteger.h"
...
int theInt = GetInteger::GetInt();
...
Все по-прежнему суперпросто, и на самом деле все это работает, когда я компилирую этот код в Xcode для iOS, используя стандартные настройки для проекта Cocos2d-x для iOS. Но когда я пытаюсь запустить этот код на Mac, он получает следующую ошибку:
Undefined symbols for architecture x86_64:
"GetInteger::GetInt()", referenced from:
AppDelegate::applicationDidFinishLaunching() in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Почему это? Как это разрешить?
Вот мой файл проекта из ZippyShare.
Ваша интуиция спасет мою тонну усилий @PLJNS, любой, кто хочет подробно, может пройти следующие шаги.
скажем, у вас есть XYZ.h & XYZ.mm, который вызывает проблему.
решение::
выберите XYZ.h & XYZ.mm и удалите их, в диалоговом окне удаления выберите "Удалить ссылку"
Теперь добавьте XYZ.h & XYZ.mm с помощью "Добавить файлы в ваше_проектное имя".
Теперь выберите "Все цели" (здесь я выбираю два из моих MobileDialerNewSt и IPA).
Счастливое кодирование :)
Убедитесь, что файлы Objective-C имеют расширение .mm
а не .m
и попробуйте .m
компиляцию еще раз.
Я не понимал, что любой файл, который вы включаете, должен быть добавлен к обоим целям, я только что увидел этот фрагмент интерфейса в эту минуту. Это исправило мою проблему.
УБЕДИТЕСЬ, ЧТОБЫ ВКЛЮЧАТЬ ВСЕ ВАШИ ФАЙЛЫ ДЛЯ ВСЕХ ВАШИХ ЦЕЛЕЙ С XCODE