Вызов обернутой статической библиотеки c ++ из библиотеки objc вызывает ошибку компоновщика - PullRequest
2 голосов
/ 20 июля 2011

У меня есть статическая библиотека cpp, и я попытался обернуть ее в статическую библиотеку obj-c, чтобы она выглядела как обычная библиотека obj-c.Моя библиотека obj-c прекрасно компилируется, но когда я пытаюсь использовать эту библиотеку в приложении, я получаю следующую ошибку компоновщика:

Apple Mach-O Linker (Id) Error
Undefined symbols for architecture i386:
  "operator new(unsigned long)", referenced from:
...

Все библиотеки компилируются нормально во всех необходимых архитектурах.

Моя библиотека-обертка выглядит так:

ObjcLib.h

@interface  ObjcLib: NSObject{
}
- (void) doSomething:(NSString*)text;
@end

ObjcLib.mm

#import "ObjcLib.h"
#import "apiFromCppLib.h"
@interface ObjcLib (){
@private
    cppApiNamespace::BaseApi* api;
}
@end

@implementation ObjcLib
- (void) doSomething:(NSString*)text{
    api = new cppApiNamespace::BaseAPI();
}

В моем приложении я добавил ObjcLib.a в разделе Бинарные ссылки с библиотеками,Также правильный путь поиска в библиотеке, но когда я пытаюсь создать объект с помощью [ObjcLib alloc], я получаю вышеупомянутую ошибку компоновщика.Я использую XCode4 с LLVM-компилятором 3.0

Надеюсь, кто-нибудь может дать мне подсказку, что может быть не так, или если моя обертка даже правильная.

РЕДАКТИРОВАТЬ: добавив -lstdc ++ в качестве флага другого компоновщикав настройках сборки приложения решает множество ошибок компоновщика, но не все.Решенными задачами были команды cpp в ObjcLib.h и ObjcLib.mm.Те, кто остаются, являются вызовами некоторых методов из BaseAPI.Рассмотрим подробнее, что отличает вызовы этого метода от тех, которые могут быть связаны правильно.

1 Ответ

5 голосов
/ 20 июля 2011

Я не знаком с вашим компилятором или проектом, но похоже, что стандартная библиотека не связана. -lstdc++ что-нибудь исправляет?

...