ObjC ++ вызывает статическую библиотеку, написанную на C

0

У меня есть проект iOS с использованием ffmpeg (который является чистой библиотекой C) и OpenCV.

Поскольку я использую интерфейс C++ OpenCV, я пишу object- C++, который является файлом .mm. Но файл не работает с ffmpeg, а Xcode жалуется на undefined symbol на этапе компоновки.

Я также использую ffmpeg в другом файле .m и все в порядке. Поэтому я уверен, что проблема .mm с .mm и статической библиотекой, написанной на C.

  • 0
    Я думаю, что проблема, с которой вы сталкиваетесь, похожа на смешивание кода на C и C ++. Что вам нужно сделать, так это исправить заголовки C, обернув их с помощью extern "C" { ... } . Иди посмотри на эту ссылку .
Теги:
opencv
ffmpeg

1 ответ

1
Лучший ответ

При использовании.mm вы получаете название c++ mangling (в отличие от c name mangling).

Исправить, добавив оболочку "extern c" в ваше объявление c-функции (не требуется для определения)

extern "C" {

int somecallback(int param);

}

РЕДАКТИРОВАТЬ: Обычно файлы c-header уже имеют эту упаковку, ищите что-то похожее на

#if defined  __cplusplus
extern "C" {
#endif

в.h файле, если не найден, тогда поместите #include внутри собственной оболочки ypur.

  • 0
    исправлено добавлением этого вокруг директивы #include

Ещё вопросы

Сообщество Overcoder
Наверх
Меню