带有CocoaLumberjack和ZXingWidget的体系结构i386的未定义符号

时间:2012-02-13 05:59:20

标签: iphone objective-c cocoa zxing

我已将ZXing QR Code阅读器库(ZXingWidget)集成到我的iPhone应用程序中,但它与我正在使用的CocoaLumberjack日志库中的函数冲突。

Undefined symbols for architecture i386:
"ExtractFileNameWithoutExtension(char const*, signed char)", referenced from: ...

DDLog.h
NSString *ExtractFileNameWithoutExtension(const char *filePath, BOOL copy);

#define THIS_FILE (ExtractFileNameWithoutExtension(__FILE__, NO))

DDLog.m
NSString *ExtractFileNameWithoutExtension(const char *filePath, BOOL copy) { ...

我称之为:

DDLogVerbose(@"%@:%@", THIS_FILE, THIS_METHOD);

原因是Obj-C文件包含标题:

// import QR Code reader APIs
#import "ZXingWidgetController.h"
#import "QRCodeReader.h"

必须将其文件扩展名从 .m 更改为 .mm 才能获得正确的C ++支持。

但后来我失去了我的* DDLogVerbose(@“%@:%@”,THIS_FILE,THIS_METHOD); *功能。

我在这里想到的是让这两个人互相玩得很好吗?

1 个答案:

答案 0 :(得分:1)

如果要将不是“C ++ - ified”的C头包含在C ++或Objective C ++文件中,则需要告诉编译器。像

这样的东西
extern "C" {
#include "DDlog.h"
}
.mm中的

应该可行。或者,如果DDLog.h是您的文件,则可以执行类似

的操作
#ifdef __cplusplus
extern "C"
#endif
NSString *ExtractFileNameWithoutExtension(const char *filePath, BOOL copy);

“extern C”的网络搜索应提供更多详细信息/示例。