программа xcode iphone, использующая файл .cpp: символ не найден - PullRequest
1 голос
/ 24 декабря 2009

Это сводило меня с ума ....

У меня есть приложение для iPhone, в котором используется образец cpp-файла Apple. Файл cpp - это aqofflinerender.cpp.

Когда я компилирую пример проекта Apple, AQOfflineRenderTest, он компилируется правильно. Когда я копирую файл aqofflinerender.cpp в свой проект и ссылаюсь на метод в файле точно так же, как образец Apple, я получаю следующую ошибку:

    cd /Users/mike/Documents/xcode/insultthem
    setenv IPHONEOS_DEPLOYMENT_TARGET 3.0
    setenv MACOSX_DEPLOYMENT_TARGET 10.5
    setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin"
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk "-L/Users/mike/XCode Projects/Debug-iphoneos" "-F/Users/mike/XCode Projects/Debug-iphoneos" -filelist "/Users/mike/XCode Projects/insultthem.build/Debug-iphoneos/insultthem.build/Objects-normal/armv6/insultthem.LinkFileList" -mmacosx-version-min=10.5 -Wl,-dead_strip -miphoneos-version-min=3.0 -framework Foundation -framework UIKit -framework CoreGraphics -framework AVFoundation -framework SystemConfiguration -framework AudioToolbox -framework CoreData -framework MessageUI -framework IOKit -o "/Users/mike/XCode Projects/Debug-iphoneos/insultthem.app/insultthem"
Undefined symbols:
  "_DoAQOfflineRender", referenced from:
      -[AudioFileManipulation combineFiles:newFileName:] in AudioFileManipulation.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

В файле .m метод определяется следующим образом:

extern void DoAQOfflineRender(CFURLRef sourceURL1, CFURLRef sourceURL2, CFURLRef sourceURL3, CFURLRef destinationURL);

В файле .cpp метод выглядит следующим образом:

void DoAQOfflineRender(CFURLRef sourceURL1, CFURLRef sourceURL2, CFURLRef sourceURL3, CFURLRef destinationURL) {

У кого-нибудь есть предложения по решению этой проблемы?

Ответы [ 3 ]

3 голосов
/ 24 декабря 2009

Ладно ... Разобрался ... По другому посту, в файле aqofflinerender.cpp, я окружил функцию следующим образом:

#if __cplusplus
extern "C" {
#endif

void DoAQOfflineRender(CFURLRef sourceURL, CFURLRef destinationURL) 
{
...
}


#if __cplusplus
}
#endif

Странно .... потому что это работает в примере с Apple без строк #if __cplusplus. Предполагая, что в моем проекте отсутствует опция компилятора ...

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

0 голосов
/ 24 декабря 2009

Вы пытались изменить файл .cpp на файл .mm? Я смутно помню что-то похожее на то, чего ожидает компилятор, когда есть сочетание target-c и c ++.

0 голосов
/ 24 декабря 2009

Разве код Apple не поставляется с включаемым файлом?Обычно в примере кода, сделанного Apple, всегда есть включаемый файл.
Если этот файл есть, его тоже нужно использовать, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...