iphone - 使用 CocoaLumberjack 和 ZXingWidget 的架构 i386 的 undefined symbol

标签 iphone objective-c cocoa zxing

我已将 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/

相关文章:

iphone - UIDatePickerModeCountDownTimer 模式下的 UIDatePicker : how to get/set the hours and minutes via code?

ios - NSString 带有西里尔语到 UTF8/拉丁语编码

objective-c - NSDate 计算夏令时

iphone - AVCaptureSession 只得到视频缓冲区

ios - 在 UITableView 中创建子部分(Swift 2.3)

objective-c - 在 iPad 应用程序中包含同一系列的多种字体

objective-c - 保存首选项以显示或隐藏 NSStatusItem

iphone - 核心数据多对多关系-谓词问题

iphone - #import <libxml/HTMLparser.h> 要导入什么库

ios - 如何推送具有透明背景的新 viewController?