我已将 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 文件包含 header :
// import QR Code reader APIs
#import "ZXingWidgetController.h"
#import "QRCodeReader.h"
其文件扩展名必须从 .m 更改为 .mm 才能获得正确的 C++ 支持。
但随后我失去了 *DDLogVerbose(@"%@:%@", THIS_FILE, THIS_METHOD);* 功能。
为了让这两个人相处融洽,我错过了什么?
最佳答案
如果您将非“C++ 化”的 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”应该提供更多详细信息/示例。
关于iphone - 使用 CocoaLumberjack 和 ZXingWidget 的架构 i386 的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9256209/