Iphone 带有CocoaLumberjack和ZXingWidget的架构i386的未定义符号

Iphone 带有CocoaLumberjack和ZXingWidget的架构i386的未定义符号,iphone,objective-c,cocoa,zxing,Iphone,Objective C,Cocoa,Zxing,我已经将ZXing二维码阅读器库(ZXingWidget)集成到我的iPhone应用程序中,但它与我正在使用的CocoaLumberjack日志库中的一个函数冲突 Undefined symbols for architecture i386: "ExtractFileNameWithoutExtension(char const*, signed char)", referenced from: ... DDLog.h NSString *ExtractFileNameWithoutExte

我已经将ZXing二维码阅读器库(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>强>变为<强> .m>以支持C++。

但是我丢失了我的*DDLogVerbose(@“%@:%@”),这个文件,这个方法;*功能


<>我在这里错过了让这两个角色互相友好的游戏吗?

< P>如果你把C不是C++的目标,或者C++的C++文件,你需要告诉编译器。差不多

extern "C" {
#include "DDlog.h"
}
#ifdef __cplusplus
extern "C"
#endif
NSString *ExtractFileNameWithoutExtension(const char *filePath, BOOL copy);
在您的
.mm
中,s应该可以工作。或者,如果
DDLog.h
是您的文件,您可以执行以下操作

extern "C" {
#include "DDlog.h"
}
#ifdef __cplusplus
extern "C"
#endif
NSString *ExtractFileNameWithoutExtension(const char *filePath, BOOL copy);

“extern C”的网络搜索应该提供更多细节/示例。

当然!哎呀,这让我回到了我的Turbo C++时代。ifdef_uucplusplus方法解决了这个问题。谢谢。:)