Я пытаюсь обернуть библиотеку C ++ (для Sybase Ultralite) с Objective-C, чтобы библиотеку можно было импортировать в MonoTouch. Я создал библиотеку Objective-C и включил скомпилированную библиотеку C ++ в этот проект, libulrt.a . Чтобы компилировать мой проект, я установил путь к Путь поиска заголовка пользователя , чтобы он указывал на каталог, в котором находятся заголовочные файлы C ++. Затем мне пришлось установить источник компиляции как в Objective-C ++ .
Проблема теперь в том, что, хотя библиотека-оболочка компилируется правильно, как только я включаю ее в другой проект Xcode, мне нужно снова установить источник компиляции как в Objective- C ++ в противном случае проект, потребляющий мою библиотеку-оболочку, выдает ошибки компоновки. Я не понимаю, почему это так, потому что заголовочный файл для моей библиотеки-оболочки содержит только код Objective-C, а не код C ++ вообще. Код C ++ находится только в реализации (файл * .mm) библиотеки-оболочки. Что мне нужно сделать, чтобы сделать реализацию C ++ полностью прозрачной для проекта, использующего библиотеку оболочки? Другими словами, я хочу иметь возможность включать свою библиотеку-обертку и компилировать с исходным кодом компиляции, когда установлен в Objective-C . У кого-нибудь есть идеи, как это сделать?
Ошибки компоновки, которые я получаю при компиляции проекта, использующего мою обертку, следующие:
(Я сократил список ошибок, потому что он ДЛИННЫЙ!)
"operator delete(void*)", referenced from:
zc3db40339fee::~zc3db40339fee()in libUltralite.a(ee39bf4763.o)
zb4297ee7d543::~zb4297ee7d543()in libUltralite.a(747e80fdad.o)
z33836a0a6f46::~z33836a0a6f46()in libUltralite.a(f240efda30.o)
"___cxa_pure_virtual", referenced from:
vtable for ze78b0ec59364in libUltralite.a(2c50e8e8ff.o)
vtable for ze78b0ec59364in libUltralite.a(2c50e8e8ff.o)
vtable for ze78b0ec59364in libUltralite.a(2c50e8e8ff.o)
Файл заголовка для моей библиотеки-оболочки выглядит следующим образом:
#import <Foundation/Foundation.h>
@interface DataAccess : NSObject {}
// Release objects.
- (void)dealloc;
// Singleton instance of the DataAccess class.
+ (DataAccess*)sharedInstance;
// Finalize the Database Manager when done with the DB.
+ (void)fini;
// Adds the given name to the database.
- (void)addName:(NSString *)name;
@end
Кто-нибудь знает, как я могу скомпилировать его как Objective-C ++, но проекты, использующие эту библиотеку, все еще видят его как Objective-C?