解决C++工程中调用FFMPEG库报接口undefined reference问题

最近软件工程开发中需要使用到FFMPEG库中一些接口,编码后编译报出如下接口为“undefined reference”的问题:

一开始怀疑是FFMPEG库编译的问题,有重新编译了一下,分别编译了x264和ffmpeg,

编译x264

./configure --enable-shared --disable-asm --enable-pthreads --enable-pic --prefix=$PWD/../install-x86

编译ffmpeg

./configure --enable-shared --disable-static --enable-libx264 --disable-asm --enable-pic --enable-pthreads --enable-ffmpeg --enable-gpl --disable-ffplay --enable-swscale --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-stripping --extra-cflags=-I$PWD/../install-x86/include --extra-ldflags=-L$PWD/../install-x86/lib --prefix=$PWD/../install-x86

编译比较简单,一次成功,然后通过nm -C libswscale.so | grep sws_getContext查看相关接口也是可以导出的,证明库编译是没有问题的。

解决问题过程如下:

1、想到ffmpeg是C语言编写的库,单独写个调用的测试源文件,例如main.cpp,调用相关接口,编译就报上述描述的问题,尝试将main.cpp修改为main.c,编译,发现编译成功。

于是怀疑是C与C++接口调用兼容性问题,并且进入 swscale.h文件中查看,

 相关的接口导出形式如上。

2、修改main.c为main.cpp,并在include的时候增加extern C的标识,

  重新编译工程,发现编译通过。

 

因此总结如下:在C++的开发工程中调用C接口,编译链接遇到接口“undefined reference”的问题,在确保相关接口确实导出到库中是,一般是代码中C++与C接口调用兼容性的问题,可以通过在include头文件增加extern C的标识即可解决。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值