c++ - ObjC++ 调用用 C 编写的静态库

标签 c++ ios c opencv ffmpeg

我有一个使用 ffmpeg(纯 C 库)和 OpenCV 的 iOS 项目。

由于我使用 OpenCV 的 C++ 接口(interface),我编写了一个 .mm 文件的 objective-c++。但是 ffmpeg 文件不正常,Xcode 在链接阶段提示 undefined symbol

我还在另一个.m文件中使用了ffmpeg,没问题。所以我确定问题出在 .mm 和用 C 编写的静态库上。

最佳答案

当使用 .mm 时,您会得到 C++ 名称修饰(与 C 名称修饰相反)。

通过向您的 c 函数声明添加“extern c”包装器来修复(定义不需要)

extern "C" {

int somecallback(int param);

}

编辑: 通常 c-header 文件已经安排了这种包装,寻找类似于

的东西
#if defined  __cplusplus
extern "C" {
#endif

在 .h 文件中,如果找不到,则将 #include 放入 ypur 自己的包装器中。

关于c++ - ObjC++ 调用用 C 编写的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27035888/

相关文章:

ios - 为什么我的 Swift for-in-loop 不执行/迭代?

iphone - 检测应用程序是否在开发模式下运行

ios - 引用 socket 未显示在 xcode 6 中

由于权限问题,无法在 Windows 7 中使用 fopen 进行读写

c++ - c 中的埃拉托色尼筛

c++ - 默认 move 构造函数中的赋值顺序是什么?

C++11:确保 GUI 调用是从主线程进行的

c++ - Python对象删除检测

c - 在 C 字符串上放置一个掩码

c - 尝试从汇编程序(64 位)的 glibc 调用 C 函数