Я пытаюсь создать некоторые служебные функции, которые можно вызывать как из кода Objective-C, так и из кода C++ в приложении iPhone. У меня есть сторонние классы C++, которые нельзя скомпилировать как ObjectiveC++ (.mm). У меня есть файл заголовка, объявляющий мои функции, а затем файл .c, определяющий их. Я трижды проверил орфографические ошибки, но по какой-то причине мой компоновщик НЕ смог найти определение ни одной из функций.
Вот заголовок для вспомогательных функций C:
#ifndef FILE_LOADER_H
#define FILE_LOADER_H
#if __cplusplus
extern "C" {
#endif
void * loadDataFromFile(const char * szFilename, bool bDocument);
void * loadImageFromFile(const char * szFilename, bool bDocument);
void loadMeshFromFile(const char *szFilename, void* pMesh);
#if __cplusplus
} // Extern C
#endif
#endif
А вот файл .c:
#include "FileLoader.h"
#include <objc/objc.h>
#include <objc/message.h>
#include <Foundation/Foundation.h>
void * loadDataFromFile(const char * szFilename, bool bDocument)
{
Class loaderClass = NSClassFromString(@"Loader");
void * pReturnVal = objc_msgSend(loaderClass, NSSelectorFromString(@"loadDataFromFile:document"), szFilename, bDocument);
return pReturnVal;
//return [Loader loadDataFromFile:szFilename document:bDocument];
}
void * loadImageFromFile(const char * szFilename, bool bDocument)
{
Class loaderClass = NSClassFromString(@"Loader");
void * pReturnVal = objc_msgSend(loaderClass, NSSelectorFromString(@"loadImageFromFile:document"), szFilename, bDocument);
return pReturnVal;
//return (void*)[Loader loadImageFromFile:szFilename document:bDocument];
}
void loadMeshFromFile(const char *szFilename, void* pMesh)
{
Class loaderClass = NSClassFromString(@"Loader");
objc_msgSend(loaderClass, NSSelectorFromString(@"loadMeshFromFile:mesh"), szFilename, pMesh);
//[Loader loadMeshFromFile:szFilename mesh:pMesh];
}
Я пробовал компилировать с внешним "C" и без него, но с тем же результатом ошибки компоновщика.
Может ли кто-нибудь пролить свет на то, что я делаю неправильно?
Ошибка линкера:
Undefined symbols for architecture i386:
"loadMeshFromFile(char const*, void*)", referenced from:
ОБНОВЛЕНИЕ: кажется, я решил проблему, скомпилировав свой исходный файл как объектный C, хотя не было фактического кода ObjectiveC, может ли кто-нибудь сказать мне, почему приведенный выше исходный файл не будет компилироваться как код C?