Mac 编译x264源码No working C compiler found 错误 |
您所在的位置:网站首页 › aac编码器哪个好 › Mac 编译x264源码No working C compiler found 错误 |
在mac上编译x264源码时,报错No working C compiler found 。网上找了一圈方案也无法解决 只能硬着头皮看configure这个脚本,通过一步一步抽丝拨茧终于是在mac上可以编译了。 这里只当记录一下,为后续同学遇到同样问题提供一个辅助解决方案。 我们直接进入configure脚本中,通过搜索报错内容,很容易就定位到报错行 # check requirements cc_check || die "No working C compiler found."这一行我理解的就是检查当前编译环境,如果编译环境配置不当的话,直接输出"No working C compiler found." 通过查看configure脚本,确认了cc_check 是一个方法 cc_check() { if [ -z "$3" ]; then if [ -z "$1$2" ]; then log_check "whether $CC works" elif [ -z "$1" ]; then log_check "for $2" else log_check "for $1" fi elif [ -z "$1" ]; then if [ -z "$2" ]; then log_check "whether $CC supports $3" else log_check "whether $CC supports $3 with $2" fi else log_check "for $3 in $1"; fi rm -f conftest.c for arg in $1; do echo "#include " >> conftest.c done echo "int main (void) { $3 return 0; }" >> conftest.c if [ $compiler_style = MS ]; then cc_cmd="$CC conftest.c $(cc_cflags $CFLAGS $CHECK_CFLAGS $2) -link $(cl_ldflags $2 $LDFLAGSCLI $LDFLAGS)" else cc_cmd="$CC conftest.c $CFLAGS $CHECK_CFLAGS $2 $LDFLAGSCLI $LDFLAGS -o conftest" fi echo $cc_cmd if $cc_cmd >conftest.log 2>&1; then res=$? log_ok else res=$? log_fail log_msg "Failed commandline was:" log_msg "--------------------------------------------------" log_msg "$cc_cmd" cat conftest.log >> config.log log_msg "--------------------------------------------------" log_msg "Failed program was:" log_msg "--------------------------------------------------" cat conftest.c >> config.log log_msg "--------------------------------------------------" fi return $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 -Werror=unknown-warning-option -lm -arch armv7 -o conftest我们可以自己本地创建一个测试源文件,通过gcc命令直接编译,来验证我们的编译环境。 本地环境没有问题,通过对比我们发现上面的调试命令多了很多配置参数。 我们逐行删除一些配置来定位哪个配置引起的错误,很顺利,这里定位到了是-arch armv7 影响到了,将上面的命令行修改为 gcc conftest.c -Wall -I. -I$(SRCPATH) -mdynamic-no-pic -Werror=unknown-warning-option -o conftest修改后的命令行,进过测试是可以正常编译测试源文件的。 现在的问题回归到gcc编译参数是怎么拼接的了,我们找到拼接的地方手动去掉这几个参数。 很快我们就找动了这个地方。 ARCH="ARM" if [ "$SYS" = MACOSX ] ; then AS="${AS-${CC}}" ASFLAGS="$ASFLAGS -DPREFIX -DPIC" # apple's ld doesn't 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上面就是判断当前编译环境,如果是mac os arm芯片的话,配置上面的参数,不知为何上面的配置,在我的mac上编译错误。我们直接大胆地把这几行注释掉 ARCH="ARM" if [ "$SYS" = MACOSX ] ; then AS="${AS-${CC}}" ASFLAGS="$ASFLAGS -DPREFIX -DPIC" # apple's ld doesn't 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进过测试验证,现在可以愉快地编译了,就注释掉这一块的影响未知,代后续发现再补充,或者有知道的伙伴评论区留言下。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |