У меня есть библиотека libDinosaurs-ios.a
, созданная из комбинации кода C ++ и Objective-C, созданного для iOS.У меня есть другой проект C ++, который ссылается на эту библиотеку и, очевидно, пытается вызвать ее функции.
Код Objective-C находится в:
// Utils.mm
const char* findApplicationPath()
{
NSString* appDirectory = [[NSBundle mainBundle] resourcePath];
return [appDirectory UTF8String];
}
Код C ++, который вызывает, живет в:
// Dinosaurs.cpp
FILE* Dinosaurs::openFile(char const* pInFileName)
{
char applePath[IOS_PATH_MAX];
strcpy(applePath, findApplicationPath());
strcat(applePath, "/");
strcat(applePath, pInFileName);
FILE* pFile = fopen(applePath, "rb")
return pFile;
}
Библиотека, по-видимому, корректно компилируется в вышеупомянутое .a
файл.Проблема возникает, когда я связываю новый проект с этой библиотекой.Все функции, которые изначально были в коде Objective C, приводят к следующей ошибке ссылки:
Undefined symbols for architecture armv7:
"findApplicationPath()", referenced from:
Dinosaurs::openFile(char const*) in libDinosaurs-ios.a(Dinosaurs.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Чтобы усложнить задачу, у меня нет проекта Xcode для проекта, который я пытаюсь построить, толькофайл CMake.В чем причина этой ошибки и как ее исправить?Я попробовал флаг компоновщика -ObjC
, но это не помогло:
set_target_properties(DinosaurZoo PROPERTIES LINK_FLAGS "-ObjC" )