Как настроить xCode 4 для компиляции target-c ++ без добавления файла «.mm» - PullRequest
3 голосов
/ 09 июля 2011

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

У меня есть проект библиотеки, назовем его MyCppLib, который содержит некоторый устаревший код c ++, и я добавляю класс адаптера в этот проект, чтобы я мог использовать его без использования target-c ++ в другом проекте. Вот обзор проекта MyCppLib.

Проект MyCppLib
- немного устаревшего кода C ++
- Adapter.h
- Adapter.mm

У меня есть другой проект, назовем его проектом Main, в котором в качестве статической библиотеки используется проект MyCppLib. Поэтому я использую xCode 4 для компиляции MyCppLib, и получаю libMyCppLib.a, и конфигурирую Main project в xCode 4, чтобы связать его с Main project. Вот обзор проекта Main.

Проект Основной
- Некоторые классы Objective-C , которые НЕ содержат файл '.mm'
- Adapter.h
- libMyCppLib.a как статическая библиотека

Пока я компилирую проект Main в xCode 4, я получаю несколько ошибок:

Неопределенные символы для архитектуры armv6:
«оператор new (без знака long)», ссылка на который:
- [Adapter init] в libMyCppLib.a (Adapter.o)
my :: cpp :: пространство имен :: MyCppClass :: MyCppClass () в libMyCppLib.a ( MyCppClass .o)

... некоторые другие подобные ошибки

ld: символ (ы) не найден для архитектуры armv6
collect2: ld вернул 1 статус выхода

Я полагаю, что это возможно, потому что проект Main не имеет возможности target-c ++, поэтому я добавляю файл .mm в проект Main. И теперь Main проект должен выглядеть так:

Проект Основной
- Некоторые классы Objective-C , которые НЕ содержат файл '.mm'
- Adapter.h
- libMyCppLib.a как статическая библиотека
- DummyObjCpp.h
- DummyObjCpp.mm

Затем я компилирую проект Main, и он преуспевает !

Итак, наконец , мой вопрос: как я могу настроить проект Main, чтобы иметь возможность Objective-C ++ без добавления файла '.mm'?

1 Ответ

6 голосов
/ 09 июля 2011

Хорошо, я несколько раз перечитал вопрос, но все еще не уверен, что понимаю проблему.

Хотя я много сделал с Objective-C, C ++ и Objective-C ++, я не сталкивался со сценарием, который вы описали со статическими библиотеками (поскольку большая часть моей разработки предназначена для OS X, а не для iOS, где динамические библиотеки разрешены и предпочтительны).

Похоже, что проблема может быть в вашем втором проекте, потому что файл .h сам по себе недостаточно говорит о том, что содержится в .a (а именно, когда вы объединяете его с остальной частью вашего исполняемого файла, вы ' нужно будет связать с libstdc++.dylib). Вы можете попробовать изменить «Тип файла» заголовочного файла Adapter.h со значения по умолчанию C header до C++ header, как показано на рисунке ниже:

enter image description here

...