2012-02-13 2 views
0

Я включил библиотеку чтения ZXing QR Code (ZXingWidget) в свое приложение для iPhone, но это конфликтует с функцией из библиотеки журналов CocoaLumberjack, которую я также использую.Неопределенные символы для архитектуры i386 с CocoaLumberjack и ZXingWidget

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 до .mm для правильной поддержки C++.

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

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

ответ

1

Если вы включили заголовки C, которые не являются «C++ - ified», в C++ или Objective C++, вам нужно сообщить компилятору. Что-то вроде

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

в вашем .mm с должно работать. С другой стороны, если DDLog.h это ваш файл, вы можете сделать что-то вроде

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

веб-поиска для «экстерном C» должен предоставить более подробное описание/примеры.

+0

КУРС! geez, это возвращает меня к моим дням Turbo C++. Метод #ifdef __cplusplus сработал. Спасибо. :) –

Смежные вопросы