C++引用C接口
在C++中调用C编写的第三方库时, 需要对C接口进行声明
以ffmpeg为例
test.cpp :
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}
#include <iostream>
int main(int argc, char **argv) {
av_register_all();
return 0;
}
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}
这里将ffmpeg的接口声明成C接口 编译器将会按照C的规则来编译和ffmpeg相关的代码.
声明的意义
C++支持重载 编译器会根据一定的规则给函数重命名
假如在上述代码中不进行声明 则av_register_all这个接口
在编译时的名字就会变成 __xx_av_register_all_xx__之类的名字
而ffmpeg库中提供的对应的接口的符号是av_register_all
这个差异会导致编译时无法链接到这个符号 将会报错 'undefined reference to av_register_all'
网友评论