iphone – 在Objective-C中包装C库并不隐藏C符号

iphone – 在Objective-C中包装C库并不隐藏C符号,第1张

概述我正在尝试使用Objective-C包装C库(用于Sybase Ultralite),以便可以将库导入MonoTouch.我创建了一个Objective-C库,并在此项目libulrt.a中包含了已编译的C库.为了让我的项目进行编译,我将用户头搜索路径的路径设置为指向C头文件所在的目录.然后,我必须设置Objective-C的编译源代码. 现在的问题是,尽管包装器库正确编译,但是一旦我将它包含在另 我正在尝试使用Objective-C包装C库(用于Sybase ultralite),以便可以将库导入Monotouch.我创建了一个Objective-C库,并在此项目libulrt.a中包含了已编译的C库.为了让我的项目进行编译,我将用户头搜索路径的路径设置为指向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?

解决方法 @Mark Bessey在这里是正确的轨道,但他说错了设置语言和添加C库之间没有什么区别.添加C库既便宜又需要(以这种或那种方式).更改语言是昂贵的,因为ObjC编译器速度较慢,并且通过Xcode在gdb中处理生成的代码对我来说有点痛苦.

您需要的是将-lstdc添加到您的消费项目中的LD_FLAGS(其他链接器标志).确保“C标准库类型”设置为“动态”.

总结

以上是内存溢出为你收集整理的iphone – 在Objective-C中包装C库并不隐藏C符号全部内容,希望文章能够帮你解决iphone – 在Objective-C中包装C库并不隐藏C符号所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1027627.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存