`
chriszeng87
  • 浏览: 739004 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

编译ios版本的librtmp+openssl

阅读更多

转自:http://blog.csdn.net/cjj198561/article/details/28955461

 

编译librtmp需要先编译openssl,因为librtmp依赖openssl

首先编译openssl:

把以下内容保存为shell脚本:

#!/bin/sh

VERSION="1.0.1h" #指明openssl的版本信息,比如下载的是openssl-1.0.1h.tar.gz那么对于就填写1.0.1h

SDKVERSION="7.1" #指明ios sdk的版本号,目前最新的是7.1,不清楚的同学可以 ls /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/ 一下看看自己的iPhoneOS7.1.sdk是不是7.1

CURRENTPATH=`pwd`
ARCHS="i386 armv7 armv7s arm64"
BUILDPATH="${CURRENTPATH}/build"
LIBPATH="${CURRENTPATH}/lib"
INCLUDEPATH="${CURRENTPATH}/include"
SRCPATH="${CURRENTPATH}/src"
LIBSSL="libssl.a"
LIBCRYPTO="libcrypto.a"
DEVELOPER=`xcode-select -print-path`

if [ ! -d "$DEVELOPER" ]; then
echo "xcode path is not set correctly $DEVELOPER does not exist (most likely because of xcode > 4.3)"
echo "run"
echo "sudo xcode-select -switch <xcode path>"
echo "for default installation:"
echo "sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer"
exit 1
fi

set -e
if [ ! -e openssl-${VERSION}.tar.gz ]; then
echo "Downloading openssl-${VERSION}.tar.gz"
curl -O http://www.openssl.org/source/openssl-${VERSION}.tar.gz
else
echo "Using openssl-${VERSION}.tar.gz"

# Remove the source directory if already exist
rm -rf "${SRCPATH}/openssl-${VERSION}"
fi

mkdir -p "${SRCPATH}"
mkdir -p "${BUILDPATH}"
mkdir -p "${LIBPATH}"
mkdir -p "${INCLUDEPATH}"

tar zxf openssl-${VERSION}.tar.gz -C "${SRCPATH}"
cd "${SRCPATH}/openssl-${VERSION}"

LIBSSL_REPO=""
LIBCRYPTO_REPO=""

for ARCH in ${ARCHS}
do
if [ "${ARCH}" == "i386" ];
then
PLATFORM="iPhoneSimulator"
else
sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" "crypto/ui/ui_openssl.c"
PLATFORM="iPhoneOS"
fi
export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
export CROSS_SDK="${PLATFORM}${SDKVERSION}.sdk"
export BUILD_TOOLS="${DEVELOPER}"

echo "Building openssl-${VERSION} for ${PLATFORM} ${SDKVERSION} ${ARCH}"
echo "Please stand by..."

export CC="${BUILD_TOOLS}/usr/bin/gcc -arch ${ARCH}"

OUTPATH="${BUILDPATH}/openssl-${PLATFORM}${SDKVERSION}-${ARCH}.sdk"
mkdir -p "${OUTPATH}"
LOG="${OUTPATH}/build-openssl-${VERSION}.log"

if [[ "$VERSION" =~ 1.0.0. ]]; then
./Configure BSD-generic32 --openssldir="${OUTPATH}" > "${LOG}" 2>&1
else
./Configure iphoneos-cross --openssldir="${OUTPATH}" > "${LOG}" 2>&1
fi

# add -isysroot to CC=
sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/Platforms/${PLATFORM}.platform/Developer/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 !" "Makefile"

make >> "${LOG}" 2>&1
make install >> "${LOG}" 2>&1
make clean >> "${LOG}" 2>&1

LIBSSL_REPO+="${OUTPATH}/lib/${LIBSSL} "
LIBCRYPTO_REPO+="${OUTPATH}/lib/${LIBCRYPTO} "
done

echo "Build library..."
lipo -create ${LIBSSL_REPO}-output ${LIBPATH}/${LIBSSL}
lipo -create ${LIBCRYPTO_REPO}-output ${LIBPATH}/${LIBCRYPTO}

cp -R ${BUILDPATH}/openssl-iPhoneSimulator${SDKVERSION}-i386.sdk/include/openssl ${INCLUDEPATH}/
echo "Building done."
echo "Cleaning up..."
rm -rf ${SRCPATH}/openssl-${VERSION}
echo "Done."

保存脚本,添加脚本的执行权限(chmod +x 脚本名称)

运行脚本

不出意外是可以编译成功的,如果失败,可以以打开那个log文件,查看失败原因。

 

编译成功以后,把lib文件和include拷贝到你的librtmp目录(可以新建一个空得librtmp目录),在librtmp目录里面同样写一个shell脚本,脚本如下:

#!/bin/sh

SDKVERSION="7.1" #这里跟openssl的地方是一个意思

 

CURRENTPATH=`pwd`
ARCHS="i386 armv7 armv7s arm64"

LIBPATH="${CURRENTPATH}/lib" #这里就是刚才拷贝过来的目录,不要修改,因为librtmp最后生成的也放到了这个下面
INCLUDEPATH="${CURRENTPATH}/include" #这里就是刚才拷贝过来的目录,不要修改,因为librtmp最后生成的也放到了这个下面

LIBRTMPREPO="git://git.ffmpeg.org/rtmpdump"
BUILDPATH="${CURRENTPATH}/build"
SRCPATH="${CURRENTPATH}/src"
LIBRTMP="librtmp.a"
DEVELOPER=`xcode-select -print-path`

if [ ! -d "$DEVELOPER" ]; then
echo "xcode path is not set correctly $DEVELOPER does not exist (most likely because of xcode > 4.3)"
echo "run"
echo "sudo xcode-select -switch <xcode path>"
echo "for default installation:"
echo "sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer"
exit 1
fi

# Check whether openssl has already installed on the machine or not.
# libcrypt.a / libssl.a

set -e
echo 'Check openssl installation'
if [ -f "${LIBPATH}/libcrypto.a" ] && [ -f "${LIBPATH}/libssl.a" ] && [ -d "${INCLUDEPATH}/openssl" ]; then
echo 'Openssl for iOS has already installed, no need to install openssl'
else
echo 'Openssl for iOS not found, will install openssl for iOS'
./build-libssl.sh
echo 'Succeeded to install openssl'
fi

# Download librtmp source code from git repository
# We assuem the user already installed git client.
echo 'Clone librtmp git repository'

# Remove the directory if already exist
rm -rf "${SRCPATH}/rtmpdump"

git clone ${LIBRTMPREPO} src/rtmpdump
cd "${SRCPATH}/rtmpdump/librtmp"

LIBRTMP_REPO=""

for ARCH in ${ARCHS}
do
if [ "${ARCH}" == "i386" ];
then
PLATFORM="iPhoneSimulator"
else
PLATFORM="iPhoneOS"
fi
export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
export CROSS_SDK="${PLATFORM}${SDKVERSION}.sdk"
export BUILD_TOOLS="${DEVELOPER}"

echo "Building librtmp for ${PLATFORM} ${SDKVERSION} ${ARCH}"
echo "Please wait..."

# add arch to CC=
sed -ie "s!AR=\$(CROSS_COMPILE)ar!AR=/usr/bin/ar!" "Makefile"
sed -ie "/CC=\$(CROSS_COMPILE)gcc/d" "Makefile"
echo "CC=\$(CROSS_COMPILE)gcc -arch ${ARCH}" >> "Makefile"

export CROSS_COMPILE="${DEVELOPER}/usr/bin/"
export XCFLAGS="-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 -I${INCLUDEPATH} -arch ${ARCH}"

if [ "${ARCH}" == "i386" ];
then
export XLDFLAGS="-L${LIBPATH} -arch ${ARCH}"
else
export XLDFLAGS="-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 -L${LIBPATH} -arch ${ARCH}"
fi
OUTPATH="${BUILDPATH}/librtmp-${PLATFORM}${SDKVERSION}-${ARCH}.sdk"
mkdir -p "${OUTPATH}"
LOG="${OUTPATH}/build-librtmp.log"

make SYS=darwin >> "${LOG}" 2>&1
make SYS=darwin prefix="${OUTPATH}" install >> "${LOG}" 2>&1
make clean >> "${LOG}" 2>&1

LIBRTMP_REPO+="${OUTPATH}/lib/${LIBRTMP} "
done

echo "Build universal library..."
lipo -create ${LIBRTMP_REPO}-output ${LIBPATH}/${LIBRTMP}

mkdir -p ${INCLUDEPATH}
cp -R ${BUILDPATH}/librtmp-iPhoneSimulator${SDKVERSION}-i386.sdk/include/ ${INCLUDEPATH}/

echo "Building done."
echo "Cleaning up..."

rm -rf ${SRCPATH}/rtmpdump
echo "Done."

保存脚本

运行脚本

不出意外就编译成功了。

分享到:
评论

相关推荐

    libRTMP去除OPENSSL和zlib

    7. **编译与配置**:在实际应用中,开发者需要按照特定的步骤和配置来编译libRTMP,以确保其在没有OPENSSL和zlib的情况下仍能正常工作。 8. **安全与性能权衡**:去掉加密库可能会降低安全性,因为没有加密的数据更...

    librtmp zlib openssl源码 编译方法 编译工具 编译好的librtmp.lib合集.zip

    这个压缩包包含了librtmp、zlib和openssl的源码,以及它们在VS2017下的编译方法和编译好的库文件。对于开发者来说,这意味着可以直接使用这些编译好的库来开发支持RTMP协议的应用,无需从头编译源码,节省了时间和...

    iOS版编译完成的OpenSSL库

    本资源提供的是针对iPhone 15.5.sdk版本编译完成的OpenSSL库,这使得开发者能够在iOS平台上集成OpenSSL的功能,以满足应用程序中的加密需求。 OpenSSL库主要包括两个主要部分:头文件(.h)和静态库文件(.a)。...

    curl+openssl编译

    总结,`curl+openssl编译`涉及到的是在Windows环境下,通过下载源代码、配置编译环境、编译`openssl`库,然后编译`curl`并使其与`openssl`集成的过程,以实现对HTTPS协议的支持。这个过程需要对编译原理、网络协议和...

    libcurl+openssl静态库(windows下)

    4. 编译libcurl:解压libcurl源码,配置编译选项,指示使用刚刚编译的openssl静态库。例如,在项目设置中添加openssl的头文件和库路径,同时设置链接器选项,指定使用静态链接openssl。 5. 构建:运行nmake或使用...

    Poco+openssl编译,支持https

    这通常涉及编译源代码或安装预编译的二进制包,确保选择适合你的操作系统和架构(在这个例子中是32位)的版本。完成安装后,你需要设置环境变量,例如将`OPENSSL_ROOT_DIR`指向OpenSSL的安装目录。 接下来,获取...

    libcurl+openssl, ios版本

    2. 集成OpenSSL:为libcurl提供加密支持,需要先将OpenSSL编译为适用于iOS的静态库。 3. 编译libcurl:配置libcurl的构建选项,使其链接到OpenSSL库,并指定目标为iOS平台。 4. 将编译好的libcurl库添加到Xcode项目...

    openssl+curl编译好的库和源码.zip

    这里我们关注的是"openssl+curl编译好的库和源码.zip",这是一个包含预编译的Win32静态库以及源代码的压缩包,特别针对Windows XP系统进行了兼容性优化。让我们深入探讨一下这两个关键组件——OpenSSL和cURL,以及...

    curl+openssl x64 debug

    windows x64 debug 支持https的curl+openssl库,博客文章:https://blog.csdn.net/weixin_39766005/article/details/109003194

    ios openssl和librtmp静态库

    在iOS开发中,有时我们需要处理加密和网络传输等任务,这时OpenSSL和librtmp库就显得...通过编译和集成OpenSSL和librtmp的静态库,开发者可以为iOS应用添加高级的加密和RTMP推流能力,确保在不同设备上的兼容性和性能。

    libcurl+openssl 下载文件

    工程是VS2010,我的电脑是win7 64位, 这里我使用的curl版本是这里面使用的libcurl版本是7.32.0,使用的openssl版本是1.0.1f,通过开启线程下载文件,在主函数里面添加任务,就可添加下载任务

    配合apache(2.2.x)+openssl(0.9.6->1.0.1升级)过程博文环境搭建的资源

    这些资源是配合apache(2.2.x)+openssl(0.9.6-&gt;1.0.1升级)过程博文环境搭建中所需要的资源,不是太好找,所以都传上来,主要有: 1.升级opensslV1.0.1b单独用到的三个文件:libeay32.dll,openssl.exe,ssleay32.dll ...

    Nginx1.14.2 + zlib + pcre + openssl

    在安装Nginx 1.14.2时,首先需要分别下载并编译这三个依赖库:zlib 1.2.11、PCRE 8.36和openssl 1.0.1j。通常步骤如下: 1. 解压每个源代码包:`tar -zxvf zlib-1.2.11.tar.gz`,`tar -zxvf pcre-8.36.tar.gz`,`...

    libcurl+openssl支持(macOS10.14.6下Xcode11.1Sdk13.1命令行编译iOS开发使用)

    如题,mac终端下自动编译curl+ssl支持的.a库的脚本文件,供iOS开发使用,生成i386,x86_64,armv7,armv7s,arm64五大CPU架构的库文件(内含编译好的,可以直接使用),消息介绍看zip中的说明文件!(2019-11-16整理)分不够的mail...

    编译ios版openssl脚本

    编译ios版openssl_脚本更新.zip。更新匹配新版XCode5默认路径并新增5s的armv7s。 需要自行下载openssl源码包。 详见 http://blog.csdn.net/piao_polar/article/details/8615002

    centosopenssl-1.1.1u+openssl-1.1.1vopenssl1.1.1u+openssl1.1.1v

    centos7 最新版本的openssl rpm安装包 openssl-1.1.1u-1.el7.x86_64.rpm openssl-debuginfo-1.1.1u-1.el7.x86_64.rpm openssl-devel-1.1.1u-1.el7.x86_64.rpm openssl-1.1.1v-1.el7.x86_64.rpm openssl-debuginfo-...

    静态编译的Qt6.8.0(win10+MSVC2022+openssl+静态运行时) part01

    https://blog.csdn.net/aggs1990/article/details/143491893 静态编译的Qt6.8.0(win10+MSVC2022+openssl+静态运行时) 压缩包比较大,这是第一部分

    openssl-1.0.2u + openssl-1.0.2k

    1. **openssl-devel-1.0.2u-1.x86_64.rpm** 和 **openssl-devel-1.0.2k-1.x86_64.rpm**:这是开发包,包含了头文件和开发工具,供程序员使用OpenSSL库来编译和构建自己的应用程序。x86_64表示它们适用于64位架构。 ...

    java + keytool+openssl 实现批量生成客户端证书

    使用Java实现根据ca购买到的根证书 批量生产客户端需要的.bks和.cer文件,从而实现双向认证

    sqlcipher4.5.0WinX64源码+Tcl+OpenSSL源码编译及编译成果(动态静态链接库含测试程序)

    2. 如果你从源码编译,相关的软件我已经准备好了,ActiveState TCL+OpenSSL-Win64,都在里面,直接安装。 3. 源码安装的过程都在文件中,特别注意: 【编译前提】 必须安装好Visual Studio以及MSVC的相应工具链。...

Global site tag (gtag.js) - Google Analytics