由于代码新增了av_ts2str()函数,提示需要包含timestamp.h文件,添加之后报错
error: expected ‘)’ before ‘PRId64’
原来这个宏定义给c用的,C++要用它,就要定义一个__STDC_FORMAT_MACROS宏显示打开它。
c++使用PRID64,需要两步:
包含头文件:<inttypes.h>
定义宏:#define __STDC_FORMAT_MACROS,也可以通过编译时加-D__STDC_FORMAT_MACROS,或者在包含文件之前定义这个宏。
编译还报错...
timestamp.h:54:70: error: taking address of temporary array
#define av_ts2str(ts) av_ts_make_string((char[AV_TS_MAX_STRING_SIZE]){0}, ts)
不允许使用这种临时变量,好吧,网上查有一种方法是:c与c++混编,可能会出现指针强制转化,编译通不过的问题,网上有说我以上遇到的问题解决方案是加上 CXXFLAGS=-fpermissive。但是该选项会将不一致代码的诊断从错误降级为警告。最好不要使用,因为会降低对于代码检查的严格性。
好麻烦,因为我只是来打印调试,av_ts2str的作用只是转成字符串,那我不转一样也可以用%lld来输出,直接就解决了。orz
或者一定要用的话,可以直接用av_ts_mak_string(),塞一个buf给它即可。
一个小函数的使用还是要经过脑子思考为什么要用到它,尤其像第三方库提供的函数。