Символ не найден, ожидается в плоском пространстве имен ObjC ++ - PullRequest
8 голосов
/ 08 апреля 2010

Возможно, у меня простая проблема, но во время компиляции нет информативных ошибок или предупреждений, чтобы предупредить меня о том, что идет не так.

У меня есть приложение Objective-C ++, которое включает основной C ++ и заголовочные файлы ObjC.

Он прекрасно работает, но при запуске выдает следующее сообщение об ошибке:

Dyld Error Message:
  Symbol not found: _OBJC_CLASS_$_AppController
  Referenced from: /Users/slate/Documents/osirixplugins/eqOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirix
  Expected in: flat namespace
 in /Users/slate/Documents/osirixplugins/eqOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirix

Никакое количество поисков в Google не привело к решению, и я уверен, что я где-то пропустил вариант компиляции или сборки.

"AppController.h" включен в цель (проверено) и #import 'd в файле классов ObjC.

Любая помощь очень ценится.

ObjC ++ постоянно вызывает у меня головную боль.

Спасибо

-S!

Ответы [ 2 ]

5 голосов
/ 11 апреля 2010

Очевидно, что класс AppController отсутствует. Определен ли класс AppController в рамках динамической библиотеки? Если да, когда вы запускаете приложение, знает ли оно, где найти библиотеки / фреймворки?

Кстати, это проблема компоновщика. Заголовочные файлы не имеют значения. Вам нужно просмотреть файлы .m или .mm.

1 голос
/ 12 апреля 2014

Не уверен, что это ваша проблема, но у меня была похожая проблема с dll на C ++, которая отнимала у меня весь день. Я не программировал на C ++ около 15 лет, и, пытаясь написать чисто виртуальную функцию, я использовал знакомый синтаксис «virtual void f ();»; - ой. В C ++ это должно быть «virtual void f () == 0;» Последняя версия gcc на Mac OSX 10.9.2 успешно компилирует код.

Я думаю, что это совершенно законное предварительное объявление ... однако, я не уверен, что C ++ позволяет классам охватывать несколько файлов, поэтому кажется, что это следует пометить (поскольку в файле CXX никогда не предоставляется реализация). Событие, символ превращает его в объектный код, и компоновщик никогда не жалуется, поэтому вы в конечном итоге получаете недостающую ссылку. Надеюсь, это кому-нибудь поможет.

...