C/C++

C++引用C接口

2018-08-20  本文已影响0人  cx7

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'
上一篇 下一篇

猜你喜欢

热点阅读