【发布时间】:2011-07-15 19:09:30
【问题描述】:
我正在尝试使用 Objective-C 包装一个 C++ 库(用于 Sybase Ultralite),以便可以将该库导入 MonoTouch。我创建了一个 Objective-C 库,并将编译后的 C++ 库包含在这个项目中,libulrt.a。为了让我的项目能够编译,我将路径设置为 User Header Search Path 以指向 C++ 头文件所在的目录。然后我不得不将 compile source as 设置为 Objective-C++。
现在的问题是,虽然包装库编译正确,但一旦我将它包含在另一个 Xcode 项目中,我必须再次将 compile source as 设置为 Objective-C++ 否则使用我的包装库的项目会出现链接错误。我不明白为什么会这样,因为我的包装库的头文件只包含 Objective-C 代码,根本不包含 C++ 代码。 C++ 代码只能在包装库的实现(*.mm 文件)中找到。我需要做什么才能使 C++ 实现对使用包装库的项目完全透明?换句话说,我希望能够包含我的包装库并使用 compile source as 设置为 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?
【问题讨论】:
标签: iphone c++ objective-c xcode xamarin.ios