Неопределенные символы для архитектуры i386 с CocoaLumberjack и ZXingWidget - PullRequest
0 голосов
/ 13 февраля 2012

Я интегрировал библиотеку считывателя QR-кода 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 *От 1011 * до .mm для правильной поддержки C ++.

Но тогда я теряю свою функциональность * DDLogVerbose (@ "% @:% @", THIS_FILE, THIS_METHOD); *.

Что мне здесь не хватает, чтобы эти двое играли друг с другом?

1 Ответ

1 голос
/ 14 февраля 2012

Если вы включаете заголовки 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);

Поиск в сети "extern C" должен предоставить более подробную информацию / примеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...