Ошибка компоновщика на Mac, но не на iOS для любой функции C ++

0

Длинная версия: я хочу реализовать свою модель приложения в 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.

Теги:
xcode
macos
cocos2d-x

3 ответа

1
Лучший ответ

Ваша интуиция спасет мою тонну усилий @PLJNS, любой, кто хочет подробно, может пройти следующие шаги.

скажем, у вас есть XYZ.h & XYZ.mm, который вызывает проблему.

решение::

  1. выберите XYZ.h & XYZ.mm и удалите их, в диалоговом окне удаления выберите "Удалить ссылку" Изображение 174551

  2. Теперь добавьте XYZ.h & XYZ.mm с помощью "Добавить файлы в ваше_проектное имя". Изображение 174551

  3. Теперь выберите "Все цели" (здесь я выбираю два из моих MobileDialerNewSt и IPA). Изображение 174551

  4. Очистить и построить.

Счастливое кодирование :)

1

Убедитесь, что файлы Objective-C имеют расширение .mm а не .m и попробуйте .m компиляцию еще раз.

0

Я не понимал, что любой файл, который вы включаете, должен быть добавлен к обоим целям, я только что увидел этот фрагмент интерфейса в эту минуту. Это исправило мою проблему.

УБЕДИТЕСЬ, ЧТОБЫ ВКЛЮЧАТЬ ВСЕ ВАШИ ФАЙЛЫ ДЛЯ ВСЕХ ВАШИХ ЦЕЛЕЙ С XCODE

Ещё вопросы

Сообщество Overcoder
Наверх
Меню