У меня есть проект iOS с использованием ffmpeg (который является чистой библиотекой C) и OpenCV.
Поскольку я использую интерфейс C++ OpenCV, я пишу object- C++, который является файлом .mm
. Но файл не работает с ffmpeg, а Xcode жалуется на undefined symbol
на этапе компоновки.
Я также использую ffmpeg в другом файле .m
и все в порядке. Поэтому я уверен, что проблема .mm
с .mm
и статической библиотекой, написанной на C.
При использовании.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.
extern "C" { ... }
. Иди посмотри на эту ссылку .