X264简介-Android上的使用(三)

在Android上使用X264库时遇到了编译错误,主要涉及到函数log2f和log2未定义。编译警告显示在多个源文件中,如encoder.c、analyse.c和ratecontrol.c等,提示log2f和log2函数的隐式声明。解决方法是将源码osdep.h中的#if!HAVE_LOG2F替换为#if1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

X264简介-Android上的使用(三)

一、X264 .a文件的log2f错误:

libx264.a(encoder-8.o):encoder.c:function validate_parameters: error: undefined reference to 'log2f'

libx264.a(encoder-8.o):encoder.c:function x264_8_encoder_reconfig: error: undefined reference to 'log2f'

libx264.a(ratecontrol-10.o):ratecontrol.c:function x264_10_ratecontrol_new: error: undefined reference to 'log2'

根据Linux上编译时的警告信息:


encoder/encoder.c: In function 'validate_parameters':
encoder/encoder.c:870:9: warning: implicit declaration of function 'log2f' [-Wimplicit-function-declaration]
float qp_i = qp_p - 6*log2f( h->param.rc.f_ip_factor );
^
encoder/encoder.c:870:31: warning: incompatible implicit declaration of built-in function 'log2f' [enabled by default]
float qp_i = qp_p - 6*log2f( h->param.rc.f_ip_factor );

analyse.c:188:9: warning: implicit declaration of function 'log2f' [-Wimplicit-function-declaration]
logs[i] = log2f( i+1 ) * 2.0f + 1.718f;
^
encoder/analyse.c:188:19: warning: incompatible implicit declaration of built-in function 'log2f' [enabled by default]
logs[i] = log2f( i+1 ) * 2.0f + 1.718f;
^
encoder/ratecontrol.c: In function 'qscale2qp':
encoder/ratecontrol.c:208:5: warning: implicit declaration of function 'log2f' [-Wimplicit-function-declaration]
return (12.0f + QP_BD_OFFSET) + 6.0f * log2f( qscale/0.85f );
^
encoder/ratecontrol.c:208:44: warning: incompatible implicit declaration of built-in function 'log2f' [enabled by default]
return (12.0f + QP_BD_OFFSET) + 6.0f * log2f( qscale/0.85f );

/ratecontrol.c:789:9: warning: implicit declaration of function 'log2' [-Wimplicit-function-declaration]
double bits_required = log2( num )
^
encoder/ratecontrol.c:789:32: warning: incompatible implicit declaration of built-in function 'log2' [enabled by default]
double bits_required = log2( num )
^
encoder/ratecontrol.c:819:27: warning: incompatible implicit declaration of built-in function 'log2f' [enabled by default]
rc->ip_offset = 6.0 * log2f( h->param.rc.f_ip_factor );
^
encoder/ratecontrol.c: In function 'x264_10_ratecontrol_start':
encoder/ratecontrol.c:1508:24: warning: incompatible implicit declaration of built-in function 'log2f' [enabled by default]
q -= 6*log2f( zone->f_bitrate_factor );
^
encoder/set.c: In function 'x264_10_sps_init':
encoder/set.c:248:9: warning: implicit declaration of function 'log2f' [-Wimplicit-function-declaration]
sps->vui.i_log2_max_mv_length_vertical = (int)log2f( X264_MAX( 1, param->analyse.i_mv_range*4-1 ) ) + 1;
^
encoder/set.c:248:55: warning: incompatible implicit declaration of built-in function 'log2f' [enabled by default]
sps->vui.i_log2_max_mv_length_vertical = (int)log2f( X264_MAX( 1, param->analyse.i_mv_range*4-1 ) ) + 1;
^
encoder/encoder.c:870:9: warning: implicit declaration of function 'log2f' [-Wimplicit-function-declaration]
float qp_i = qp_p - 6*log2f( h->param.rc.f_ip_factor );
^
encoder/encoder.c:870:31: warning: incompatible implicit declaration of built-in function 'log2f' [enabled by default]
float qp_i = qp_p - 6*log2f( h->param.rc.f_ip_factor );

解决办法:源码中的 osdep.h 文件中的

在这里插入图片描述

#if !HAVE_LOG2F  直接替换成  #if 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值