上海做网站 公司,公司网站制作效果,网站做管理员功能代码,购物网站开发的背景在mac上编译x264源码时#xff0c;报错No working C compiler found 。网上找了一圈方案也无法解决
只能硬着头皮看configure这个脚本#xff0c;通过一步一步抽丝拨茧终于是在mac上可以编译了。
这里只当记录一下#xff0c;为后续同学遇到同样问题提供一个辅助解决方案。…在mac上编译x264源码时报错No working C compiler found 。网上找了一圈方案也无法解决
只能硬着头皮看configure这个脚本通过一步一步抽丝拨茧终于是在mac上可以编译了。
这里只当记录一下为后续同学遇到同样问题提供一个辅助解决方案。
我们直接进入configure脚本中通过搜索报错内容很容易就定位到报错行
# check requirementscc_check || die No working C compiler found.
这一行我理解的就是检查当前编译环境如果编译环境配置不当的话直接输出No working C compiler found.
通过查看configure脚本确认了cc_check 是一个方法
cc_check() {if [ -z $3 ]; thenif [ -z $1$2 ]; thenlog_check whether $CC workselif [ -z $1 ]; thenlog_check for $2elselog_check for $1fielif [ -z $1 ]; thenif [ -z $2 ]; thenlog_check whether $CC supports $3elselog_check whether $CC supports $3 with $2fielselog_check for $3 in $1;firm -f conftest.cfor arg in $1; doecho #include $arg conftest.cdoneecho int main (void) { $3 return 0; } conftest.cif [ $compiler_style MS ]; thencc_cmd$CC conftest.c $(cc_cflags $CFLAGS $CHECK_CFLAGS $2) -link $(cl_ldflags $2 $LDFLAGSCLI $LDFLAGS)elsecc_cmd$CC conftest.c $CFLAGS $CHECK_CFLAGS $2 $LDFLAGSCLI $LDFLAGS -o conftestfiecho $cc_cmdif $cc_cmd conftest.log 21; thenres$?log_okelseres$?log_faillog_msg Failed commandline was:log_msg --------------------------------------------------log_msg $cc_cmdcat conftest.log config.loglog_msg --------------------------------------------------log_msg Failed program was:log_msg --------------------------------------------------cat conftest.c config.loglog_msg --------------------------------------------------fireturn $res
}
这个方法就是通过模拟编译源文件的方式来验证编译环境
这段代码会动态生成一个名叫conftest.c的原文件文件内容就是简单的循环
int main{for( 1 in 9);return 0;
}
大体就是上面这样通过编译上面的文件来确认编译环境。
回到我们的问题由于报错No working C compiler found.确认是这个方法编译报错了。
下面就转到定位这个脚本的编译命令。很快我们echo 输出能看到编译这个测试源文件的命令为
gcc conftest.c -Wall -I. -I$(SRCPATH) -mdynamic-no-pic -arch armv7 -Werrorunknown-warning-option -lm -arch armv7 -o conftest
我们可以自己本地创建一个测试源文件通过gcc命令直接编译来验证我们的编译环境。
本地环境没有问题通过对比我们发现上面的调试命令多了很多配置参数。
我们逐行删除一些配置来定位哪个配置引起的错误很顺利这里定位到了是-arch armv7 影响到了将上面的命令行修改为
gcc conftest.c -Wall -I. -I$(SRCPATH) -mdynamic-no-pic -Werrorunknown-warning-option -o conftest
修改后的命令行进过测试是可以正常编译测试源文件的。
现在的问题回归到gcc编译参数是怎么拼接的了我们找到拼接的地方手动去掉这几个参数。
很快我们就找动了这个地方。 ARCHARMif [ $SYS MACOSX ] ; thenAS${AS-${CC}}ASFLAGS$ASFLAGS -DPREFIX -DPIC # apples ld doesnt support movw/movt relocations at all# build for armv7 by defaultif ! echo $CFLAGS | grep -Eq \-arch ; thenCFLAGS$CFLAGS -arch armv7LDFLAGS$LDFLAGS -arch armv7fi
上面就是判断当前编译环境如果是mac os arm芯片的话配置上面的参数不知为何上面的配置在我的mac上编译错误。我们直接大胆地把这几行注释掉 ARCHARMif [ $SYS MACOSX ] ; thenAS${AS-${CC}}ASFLAGS$ASFLAGS -DPREFIX -DPIC # apples ld doesnt support movw/movt relocations at all# build for armv7 by default# if ! echo $CFLAGS | grep -Eq \-arch ; then# CFLAGS$CFLAGS -arch armv7# LDFLAGS$LDFLAGS -arch armv7# fi
进过测试验证现在可以愉快地编译了就注释掉这一块的影响未知代后续发现再补充或者有知道的伙伴评论区留言下。