2012-02-13 61 views
0

我已经将ZXing QR码读取器库(ZXingWidget)集成到我的iPhone应用中,但它与我也在使用的CocoaLumberjack日志库中的函数发生冲突。CocoaLumberjack和ZXingWidget的架构i386的未定义符号

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); 

这样做的原因是,无论对象 - 文件包含头:

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

其文件扩展名必须从改变.m.mm以获得适当的C++支持。

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

我在这里错过了什么让这两个玩对方很好?

回答

1

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

extern "C" { 
#include "DDlog.h" 
} 

在你的.mm s应该工作。另外,如果DDLog.h是你的文件,你可以这样做

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

为“外部C” Web搜索应该提供更多的细节/例子。

+0

OF COURSE! geez,这将我带回到我的Turbo C++时代。 #ifdef __cplusplus方法解决了它。谢谢。 :) – 2012-02-14 03:37:46

相关问题