美文网首页C/C++
C++引用C接口

C++引用C接口

作者: cx7 | 来源:发表于2018-08-20 14:02 被阅读0次

    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'
    

    相关文章

      网友评论

        本文标题:C++引用C接口

        本文链接:https://www.haomeiwen.com/subject/vtjkiftx.html