登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> CLQ工作室开源代码 - [函数库] >> 主题: gcc_cross_test1.sh     [回主站]     [分站链接]
标题
gcc_cross_test1.sh
clq
浏览(243) + 2021-02-24 13:22:29 发表 编辑

关键字:

gcc_cross_test1.sh

#!/bin/sh

# clq 2021 修改自 build_x264.sh

#Create by Kingxl
#http://itjoy.org
#Builds versions of the VideoLAN x264 for armv7 ,armv7s and arm64
#Combines the three libraries into a single one
#Make sure you have installed: Xcode/Preferences/Downloads/Components/Command Line Tools
#
#---------------------------------------------------------------
# clq 2020 原编译脚本 -- mac 下编译 ios 真机和模拟器 -- 已经失效,因此重写一下.
# 主要是修改了各个路径和补充了 include 的路径,以及区分模拟器.
# 其实可以参考 ios ffmpeg 编译脚本例如 ijkplayer 自带的那个版本,要比这个完善很多,原理其实是一样的.
# 把开发路径配置的那一段照抄
#
# --------
# 生成后的文件一定要校验
# lipo -info libx264.a
# Architectures in the fat file: libx264.a are: armv7 armv7s arm64
# 因为参考 https://www.jianshu.com/p/2cf6c3085729 首先确定libx264.a是否是一个fat file支持多种架构的库
# 否则是 ffmpeg 编译时会报 ERROR: libx264 not found . 这可能是 ios 平台独有的要求.
# 如果 x264 没有明确打开 bitcode. ffmpeg 也必须关闭,否则一样会报 libx264 not found
# 参考 ffmpeg 编译脚本中的 FF_XCODE_BITCODE=
# FF_XCODE_BITCODE="-fembed-bitcode"
# --------
# 这个方法 -- 找到所有的libx264.c,打开并找到相应的代码行,将“x264_bit_depth”改成“X264_BIT_DEPTH”即可.
# 确实可行,不过还是应该找到真实的原因.暂时可以这样处理.根本的原因应该是 x264 的版本太新.不过更换旧版本的代价估计更大
# 所以目前来说还是这样吧.
#---------------------------------------------------------------

#Lib install dir. 应该指的是编译好的文件的安装路径
DEST=install

#还是不行,引用到了 MacOSX 的头文件
#/Users/ccc/Desktop/1/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/machine/types.h:37:2: error:
#architecture not supported
#要加 -I 先引入 iphone 的头文件



#This is decided by your SDK version.
# 这个脚本本意是想选不同 sdk 下的头文件和 lib ,不过实际上不同的 sdk 的位置不同点太多了,所以还是手工指定路径比较保险
# 手工指定就是要自己查找相应的路径,不过这样也好,也好了解 xcode.app 下的各个文件结构,更方便以后的开发
#SDK_VERSION="7.1"
#SDK_VERSION="12.1"

#Archs 要编译的版本,我试了一下 i386/686 出不来,估计要再改其他路径
ARCHS="i686 x86_64 armv7 armv7s arm64"
#ARCHS="armv7 armv7s arm64" //只有 arm 是不行的,模拟器用不了
#ARCHS="arm64"
#ARCHS="i686 i386" //至少 xcode 10 不支持,它认为这两个是相同的.倒是可以用 x86_64
#ARCHS="armv7"

#DEVPATH=/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDK_VERSION}.sdk
#DEVPATH=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDK_VERSION}.sdk
#DEVPATH=/Users/ccc/Desktop/1/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDK_VERSION}.sdk/usr

# 这个其实最好直接当做 sysroot, --sysroot 似乎是 linux 系非常喜欢用的一个路径,似乎是对应 linux 系统的路径
# 具体以后再说. 这个目录下应该有 usr, usr/include, usr/lib 三个目录.没有的话那说明你设置错误了.
DEVPATH=/Users/ccc/Desktop/1/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk

#clq 2020 add 指定链接库的路径.这个应该是真机与模拟器是不同的,真机为 "...iPhoneOS.platform..."
# 模拟器大概是 "... iPhoneSimulator.platform ..." 桌面机就是 "...MacOSX.platform..."
LIBPATH=/Users/ccc/Desktop/1/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib

#clq 2020 add 头文件路径.同上.要说的是,这个原始脚本中没有,不设置的话就会使用默认的 MacOSX.platform 的y头文件
# 导致编译失败
INCLUDEPATH=/Users/ccc/Desktop/1/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include

# 是否打开 bitcode 编译,设置的原因见上面的注释.不想用的话直接关闭就好了,不过现在的 ios 一般都有要求
# -- 据说 macos 下反而是一定关闭.
FF_XCODE_BITCODE="-fembed-bitcode"
#FF_XCODE_BITCODE=

#扩展的编译 c 标志,注意这个编译时还没到链接的时候的.单独拿出来是为了方便修改 include 的路径
# 这个其实直接对应 x264 configre 脚本的 --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS
# $ARCH 是从循环中来的,所不能在外面使用,否则生成出来的平台是错误的! 会一直显示 armv7
#ECFLAGS="-I$INCLUDEPATH -arch $ARCH"
ECFLAGS="-I$INCLUDEPATH "
#ECFLAGS="-I$INCLUDEPATH $FF_XCODE_BITCODE " //现在用 bitcode 会要求 asm 所以暂时还是先不用吧

#扩展的链接标志.同上.
#ELDFLAGS="-L$LIBPATH -arch $ARCH"
ELDFLAGS="-L$LIBPATH "

#Clone x264
#git clone git://git.videolan.org/x264.git x264

# 源码放在子目录.其实我觉得放同目录还好,这样可以直接使用 make clean 这样的命令细分编译.
# cd x264

#export CC=`xcodebuild -find clang`
#export CC=`/Users/ccc/Desktop/1/Xcode.app/Contents/Developer/usr/bin/gcc`
export CC=/Users/ccc/Desktop/1/Xcode.app/Contents/Developer/usr/bin/gcc

for ARCH in $ARCHS; do

echo "Building $ARCH ......"

# $ARCH 指的是 armv7 arm64 这些的,一定不能搞错,一定不能在循环外面使用

# ./configure \
# --host=arm-apple-darwin \
# --sysroot=$DEVPATH \
# --prefix=$DEST/$ARCH \
# --extra-cflags="$ECFLAGS -arch $ARCH" \
# --extra-ldflags="$ELDFLAGS -arch $ARCH" \
# --enable-pic \
# --enable-static \
# --disable-asm

# make && make install && make clean

export CFLAGS="$ECFLAGS -arch $ARCH"
export LDLAGS="$ELDFLAGS -arch $ARCH"
echo "CFLAGS : $CFLAGS"

mkdir out_lib
mkdir out_lib/$ARCH
mkdir out_lib/$ARCH/lib

#$CC conftest.c $CFLAGS $2 -E -o conftest"
#$CC gcc_cross_test1.c $CFLAGS -E -o out_lib/$ARCH/lib/gcc_cross_test1.o

# gcc -c person.c
# ar -r libperson.a person.o

#$CC gcc_cross_test1.c $CFLAGS -E -o out_lib/$ARCH/lib/libx264.a
$CC gcc_cross_test1.c $CFLAGS -c -o out_lib/$ARCH/lib/gcc_cross_test1.o

# ar 命令都是一样的吗? 不需要指定不同目录下的 ar 吗?
ar -r out_lib/$ARCH/lib/libx264.a out_lib/$ARCH/lib/gcc_cross_test1.o

echo "Installed: $DEST/$ARCH"

done

echo "Combining library ......"
BUILD_LIBS="libx264.a"
OUTPUT_DIR="iPhoneOS"

#cd install
mkdir $OUTPUT_DIR
mkdir $OUTPUT_DIR/lib
mkdir $OUTPUT_DIR/include

# 下面应该是合并多个 .a 文件为跨平台的 .a 文件.这个文件不一定会成功,要校验的.

LIPO_CREATE=""

for ARCH in $ARCHS; do
LIPO_CREATE="$LIPO_CREATE out_lib/$ARCH/lib/$BUILD_LIBS "
done

lipo -create $LIPO_CREATE -output $OUTPUT_DIR/lib/$BUILD_LIBS
cp -f $ARCH/include/*.* $OUTPUT_DIR/include/

# 这是校验生成的 .a 文件.查看包括了多少个平台的.如果没列出相应的平台,那么对应平台是用不了的.比如没有 386 那些是就是不会支持模拟器.
echo "************************************************************"
lipo -i $OUTPUT_DIR/lib/$BUILD_LIBS
echo "************************************************************"

echo "OK, merge done!"




总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
C语言开源项目编译总结 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1