Связывание библиотеки C ++ с библиотекой с кодом C ++ и Objective-C - PullRequest
0 голосов
/ 21 января 2019

У меня есть библиотека 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" )
...