С++ не компилируется (ссылка?) в XCode 4.2

У меня есть очень маленькая программа в Xcode, отображающая только метку и меняющая текст метки в методе viewWillAppear. label.text должен исходить из библиотеки C++ с такой функцией:

int getNumber(){
    return 42;
}

Проблема в том, что включение класса с #import "TestLibMain.h" в мой класс *.mm(!) и использование функции с

TestLibMain *tlb = new TestLibMain();
int myInt = tlb->getNumber();
NSString *myString = [NSString stringWithFormat:@"%d",myInt];

вызывает не ошибку компилятора, а ошибку компоновщика:

Неопределенные символы для архитектуры i386: «TestLibMain::getNumber()», на которые ссылается: -[tbViewController buttonPressed:] в tbViewController.o ld: символ(ы) не найден(ы) для архитектуры i386 clang: ошибка: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v, чтобы увидеть вызов)

У меня сложилось впечатление, что cpp-класс не был скомпилирован.

Я много чего перепробовал, но где-то зависает. Это все в том же каталоге, я использую расширение .mm, все нормально, но всегда эта ошибка компоновщика. Сходить с ума :-)

Mac OS X Lion, XCode 4.2

Любые идеи?


person Marc Schlösser    schedule 16.11.2011    source источник
comment
Библиотека создана для 32-битной или 64-битной архитектуры?   -  person Some programmer dude    schedule 16.11.2011
comment
Интересный вопрос. Я надеялся, что библиотека TestLibMain, содержащая функцию getNumber(), будет автоматически создана во время компиляции Xcode-проекта. Поэтому у меня нет предварительно скомпилированной библиотеки. Я ошибаюсь в целом?   -  person Marc Schlösser    schedule 16.11.2011


Ответы (1)


int getNumber() {
    return 42;
}

в .cpp или .mm определяет getNumber() как свободную функцию. Этот:

int TestLibMain::getNumber() {
    return 42;
}

определяет getNumber() как члена TestLibMain.

person IronMensan    schedule 16.11.2011
comment
Ага. Вы выиграли цену, большое спасибо :-) - person Marc Schlösser; 16.11.2011