感謝先行
Libevent github地址
機(jī)型架構(gòu)參考
感謝分享1
感謝分享2
步驟
- 找一個(gè)文件夾败玉,進(jìn)入到該文件夾
touch build_libevent.sh
- 把感謝分享1中的README.md的內(nèi)容復(fù)制到build_libevent.sh中,記得點(diǎn)個(gè)star金拒,都用了別人的勞動(dòng)成果了索守。
- 在新的bash里
xcodebuild -showsdks
如下圖
然后修改 下述代碼塊中的前兩行
###########################################################################
# Choose your libevent version and your currently-installed iOS SDK version:
#
VERSION="2.1.12-stable" #Choose your libevent version
USERSDKVERSION="14.4" #your currently-installed iOS SDK version in last shortcut
MINIOSVERSION="9.0"
VERIFYGPG=false
因?yàn)槲业膌ibevent是用在真機(jī)上的,模擬器不能用辱挥,所以我直接刪除了模擬器相關(guān)的東西舔箭,這個(gè)的話熊痴,可以根據(jù)自己的需要進(jìn)行裁剪
- 執(zhí)行腳本
./build_libevent.sh
正常如下
checking whether to build static libraries... yes
checking for library containing inet_ntoa... none required
checking for library containing socket... none required
checking for library containing inet_aton... none required
checking for library containing sendfile... none required
checking for WIN32... no
checking for MIDIPIX... no
checking for CYGWIN... no
checking zlib.h usability... yes
checking zlib.h presence... yes
checking for zlib.h... yes
checking for library containing inflateEnd... -lz
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
checking for arm-apple-darwin-pkg-config... no
checking for pkg-config... no
checking for library containing SSL_new... no
checking for library containing SSL_new... no
checking openssl/ssl.h usability... no
checking openssl/ssl.h presence... no
checking for openssl/ssl.h... no
configure: error: openssl is a must but can not be found. You should add the directory containing `openssl.pc' to the `PKG_CONFIG_PATH' environment variable, or set `CFLAGS' and `LDFLAGS' directly for openssl, or use `--disable-openssl' to disable support for openssl encryption
使用
記得把dependencies目錄下的include 文件夾加入你的工程乳蓄,并在Build Settings -> Search Paths
加入這個(gè)引用咪橙。否則會(huì)報(bào)#include <event2/util.h> not found
如果遇到如下的命令行報(bào)錯(cuò),就說明你的sdk版本不對(duì),仔細(xì)檢查xcodebuild -showsdks
和你的腳本寫的
? build-ios git:(master) ? ./build_libevent.sh
Using libevent-2.1.12-stable.tar.gz
Building without ccache
??
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-apple-darwin-strip... no
checking for strip... strip
checking for a thread-safe mkdir -p... build-aux/install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking whether make supports the include directive... yes (GNU style)
checking for arm-apple-darwin-gcc... /usr/bin/gcc -arch armv7 -miphoneos-version-min=9.0
checking whether the C compiler works... no
configure: error: in `/Users/draven/Desktop/speedup/third-party/libevent/build-ios/build/src/libevent-2.1.12-stable':
configure: error: C compiler cannot create executables
See `config.log' for more details
至此美侦,configure執(zhí)行了产舞,但是少了依賴項(xiàng)。
configure: error: openssl is a must but can not be found. You should add the directory containing `openssl.pc' to the `PKG_CONFIG_PATH' environment variable, or set `CFLAGS' and `LDFLAGS' directly for openssl, or use `--disable-openssl' to disable support for openssl encryption
最后貼上大佬的腳本
###########################################################################
# Choose your libevent version and your currently-installed iOS SDK version:
#
VERSION="2.1.8-stable"
USERSDKVERSION="10.3"
MINIOSVERSION="8.0"
VERIFYGPG=false
###########################################################################
#
# Don't change anything under this line!
#
###########################################################################
# No need to change this since xcode build will only compile in the
# necessary bits from the libraries we create
ARCHS="i386 x86_64 armv7 armv7s arm64"
DEVELOPER=`xcode-select -print-path`
#DEVELOPER="/Applications/Xcode.app/Contents/Developer"
# for continuous integration
# https://travis-ci.org/mtigas/iOS-OnionBrowser
if [ "$1" == "--noverify" ]; then
VERIFYGPG=false
fi
if [ "$2" == "--travis" ]; then
ARCHS="i386 x86_64"
fi
if [[ ! -z "$TRAVIS" && $TRAVIS ]]; then
# Travis CI highest available version
echo "==================== TRAVIS CI ===================="
SDKVERSION="${USERSDKVERSION}"
else
SDKVERSION="${USERSDKVERSION}"
fi
cd "`dirname \"$0\"`"
REPOROOT=$(pwd)
# Where we'll end up storing things in the end
OUTPUTDIR="${REPOROOT}/dependencies"
mkdir -p ${OUTPUTDIR}/include
mkdir -p ${OUTPUTDIR}/lib
BUILDDIR="${REPOROOT}/build"
# where we will keep our sources and build from.
SRCDIR="${BUILDDIR}/src"
mkdir -p $SRCDIR
# where we will store intermediary builds
INTERDIR="${BUILDDIR}/built"
mkdir -p $INTERDIR
########################################
cd $SRCDIR
# Exit the script if an error happens
set -e
if [ ! -e "${SRCDIR}/libevent-${VERSION}.tar.gz" ]; then
echo "Downloading libevent-${VERSION}.tar.gz"
curl -LO https://github.com/libevent/libevent/releases/download/release-${VERSION}/libevent-${VERSION}.tar.gz
fi
echo "Using libevent-${VERSION}.tar.gz"
# up to you to set up `gpg` and add keys to your keychain
# may have to import from link on http://www.wangafu.net/~nickm/ or http://www.citi.umich.edu/u/provos/
if $VERIFYGPG; then
if [ ! -e "${SRCDIR}/libevent-${VERSION}.tar.gz.asc" ]; then
curl -LO https://github.com/libevent/libevent/releases/download/release-${VERSION}/libevent-${VERSION}.tar.gz.asc
fi
echo "Using libevent-${VERSION}.tar.gz.asc"
if out=$(gpg --status-fd 1 --verify "libevent-${VERSION}.tar.gz.asc" "libevent-${VERSION}.tar.gz" 2>/dev/null) &&
echo "$out" | grep -qs "^\[GNUPG:\] VALIDSIG"; then
echo "$out" | egrep "GOODSIG|VALIDSIG"
echo "Verified GPG signature for source..."
else
echo "$out" >&2
echo "COULD NOT VERIFY PACKAGE SIGNATURE..."
exit 1
fi
fi
tar zxf libevent-${VERSION}.tar.gz -C $SRCDIR
cd "${SRCDIR}/libevent-${VERSION}"
set +e # don't bail out of bash script if ccache doesn't exist
CCACHE=`which ccache`
if [ $? == "0" ]; then
echo "Building with ccache: $CCACHE"
CCACHE="${CCACHE} "
else
echo "Building without ccache"
CCACHE=""
fi
set -e # back to regular "bail out on error" mode
export ORIGINALPATH=$PATH
for ARCH in ${ARCHS}
do
if [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ];
then
PLATFORM="iPhoneSimulator"
EXTRA_CONFIG="--host=${ARCH}-apple-darwin"
else
PLATFORM="iPhoneOS"
EXTRA_CONFIG="--host=arm-apple-darwin"
fi
mkdir -p "${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk"
export PATH="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/:${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/usr/bin/:${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin:${DEVELOPER}/usr/bin:${ORIGINALPATH}"
export CC="${CCACHE}`which gcc` -arch ${ARCH} -miphoneos-version-min=${MINIOSVERSION}"
./configure --disable-shared --enable-static --disable-debug-mode ${EXTRA_CONFIG} --disable-clock-gettime \
--prefix="${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk" \
LDFLAGS="$LDFLAGS -L${OUTPUTDIR}/lib" \
CFLAGS="$CFLAGS -Os -I${OUTPUTDIR}/include -isysroot ${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk" \
CPPFLAGS="$CPPFLAGS -I${OUTPUTDIR}/include -isysroot ${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk"
# Build the application and install it to the fake SDK intermediary dir
# we have set up. Make sure to clean up afterward because we will re-use
# this source tree to cross-compile other targets.
make -j$(sysctl hw.ncpu | awk '{print $2}')
make install
make clean
done
########################################
echo "Build library..."
# These are the libs that comprise libevent. `libevent_openssl` and `libevent_pthreads`
# may not be compiled if those dependencies aren't available.
OUTPUT_LIBS="libevent.a libevent_core.a libevent_extra.a libevent_openssl.a libevent_pthreads.a"
for OUTPUT_LIB in ${OUTPUT_LIBS}; do
INPUT_LIBS=""
for ARCH in ${ARCHS}; do
if [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ];
then
PLATFORM="iPhoneSimulator"
else
PLATFORM="iPhoneOS"
fi
INPUT_ARCH_LIB="${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk/lib/${OUTPUT_LIB}"
if [ -e $INPUT_ARCH_LIB ]; then
INPUT_LIBS="${INPUT_LIBS} ${INPUT_ARCH_LIB}"
fi
done
# Combine the three architectures into a universal library.
if [ -n "$INPUT_LIBS" ]; then
lipo -create $INPUT_LIBS \
-output "${OUTPUTDIR}/lib/${OUTPUT_LIB}"
else
echo "$OUTPUT_LIB does not exist, skipping (are the dependencies installed?)"
fi
done
for ARCH in ${ARCHS}; do
if [ "${ARCH}" == "i386" ] || [ "${ARCH}" == "x86_64" ];
then
PLATFORM="iPhoneSimulator"
else
PLATFORM="iPhoneOS"
fi
cp -R ${INTERDIR}/${PLATFORM}${SDKVERSION}-${ARCH}.sdk/include/* ${OUTPUTDIR}/include/
if [ $? == "0" ]; then
# We only need to copy the headers over once. (So break out of forloop
# once we get first success.)
break
fi
done
####################
echo "Building done."
echo "Cleaning up..."
rm -fr ${INTERDIR}
rm -fr "${SRCDIR}/libevent-${VERSION}"
echo "Done."