iphone – 在Xcode中作为“运行脚本”阶段运行时,OpenSSL构建脚
发布时间:2020-12-14 19:13:09 所属栏目:百科 来源:网络整理
导读:我正在尝试运行一个脚本来构建iOS的OpenSSL(armv6,armv7和i386)作为 Xcode中的“运行脚本”阶段. 从命令行作为独立脚本运行时,脚本成功构建.结果是编译的libcrypto.a,libssl.a和包含头文件的目录. 但是,当我在Xcode中将脚本作为运行脚本阶段运行时,它会在mak
我正在尝试运行一个脚本来构建iOS的OpenSSL(armv6,armv7和i386)作为
Xcode中的“运行脚本”阶段.
从命令行作为独立脚本运行时,脚本成功构建.结果是编译的libcrypto.a,libssl.a和包含头文件的目录. 但是,当我在Xcode中将脚本作为运行脚本阶段运行时,它会在make和错误结束时说明它无法找到libcrypto引用的任何符号. shlib_target=; if [ -n "" ]; then shlib_target="bsd-gcc-shared"; fi; LIBRARIES="-L.. -lssl -L.. -lcrypto" ; make -f ../Makefile.shared -e APPNAME=openssl OBJECTS="openssl.o verify.o asn1pars.o req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o errstr.o ca.o pkcs7.o crl2p7.o crl.o rsa.o rsautl.o dsa.o dsaparam.o ec.o ecparam.o x509.o genrsa.o gendsa.o genpkey.o s_server.o s_client.o speed.o s_time.o apps.o s_cb.o s_socket.o app_rand.o version.o sess_id.o ciphers.o nseq.o pkcs12.o pkcs8.o pkey.o pkeyparam.o pkeyutl.o spkac.o smime.o cms.o rand.o engine.o ocsp.o prime.o ts.o" LIBDEPS=" $LIBRARIES " link_app.${shlib_target} ( :; LIBDEPS="${LIBDEPS:--L.. -lssl -L.. -lcrypto }"; LDCMD="${LDCMD:-/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -arch i386}"; LDFLAGS="${LDFLAGS:--isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -DOPENSSL_THREADS -pthread -D_THREAD_SAFE -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DTERMIOS -O3 -fomit-frame-pointer -Wall}"; LIBPATH=`for x in $LIBDEPS; do echo $x; done | sed -e 's/^ *-L//;t' -e d | uniq`; LIBPATH=`echo $LIBPATH | sed -e 's/ /:/g'`; LD_LIBRARY_PATH=$LIBPATH:$LD_LIBRARY_PATH ${LDCMD} ${LDFLAGS} -o ${APPNAME:=openssl} openssl.o verify.o asn1pars.o req.o dgst.o dh.o dhparam.o enc.o passwd.o gendh.o errstr.o ca.o pkcs7.o crl2p7.o crl.o rsa.o rsautl.o dsa.o dsaparam.o ec.o ecparam.o x509.o genrsa.o gendsa.o genpkey.o s_server.o s_client.o speed.o s_time.o apps.o s_cb.o s_socket.o app_rand.o version.o sess_id.o ciphers.o nseq.o pkcs12.o pkcs8.o pkey.o pkeyparam.o pkeyutl.o spkac.o smime.o cms.o rand.o engine.o ocsp.o prime.o ts.o ${LIBDEPS} ) Undefined symbols for architecture i386: "_ENGINE_load_gost",referenced from: _ENGINE_load_builtin_engines in libcrypto.a(eng_all.o) ld: symbol(s) not found for architecture i386 collect2: ld returned 1 exit status make[2]: *** [link_app.] Error 1 make[1]: *** [openssl] Error 2 make: *** [build_apps] Error 1 我几乎可以肯定这是一个路径问题,但我无法弄清楚如何告诉Xcode(或脚本)使用哪些路径. 需要修改脚本available here以解释最近使用Xcode 4.3对开发人员工具位置的更改(即Developer /不再位于root用户,但实际上在Xcode.app中). 这是问题完整性的脚本: #!/bin/sh # Automatic build script for libssl and libcrypto # for iPhoneOS and iPhoneSimulator # # Created by Felix Schulze on 16.12.10. # Copyright 2010 Felix Schulze. All rights reserved. # # Licensed under the Apache License,Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing,software # distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ########################################################################### # Change values here # # # VERSION="1.0.0c" # SDKVERSION="5.0" # # # ########################################################################### # # # Don't change anything under this line! # # # ########################################################################### CURRENTPATH=`pwd` CURRENTPATH="${CURRENTPATH}/openssl" 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" fi mkdir -p "${CURRENTPATH}/src" tar zxf openssl-${VERSION}.tar.gz -C "${CURRENTPATH}/src" rm openssl-${VERSION}.tar.gz cd "${CURRENTPATH}/src/openssl-${VERSION}" ############ # iPhone Simulator echo "Building openssl for iPhoneSimulator ${SDKVERSION} i386" echo "Please stand by..." export CC="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -arch i386" mkdir -p "${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk" LOG="${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk/build-openssl-${VERSION}.log" ./configure BSD-generic32 --openssldir="${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk" > "${LOG}" 2>&1 # add -isysroot to CC= sed -ie "s!^CFLAG=!CFLAG=-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDKVERSION}.sdk !" "Makefile" make >> "${LOG}" 2>&1 make install >> "${LOG}" 2>&1 make clean >> "${LOG}" 2>&1 ############# ############# # iPhoneOS armv6 echo "Building openssl for iPhoneOS ${SDKVERSION} armv6" echo "Please stand by..." export CC="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -arch armv6" mkdir -p "${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk" LOG="${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk/build-openssl-${VERSION}.log" ./configure BSD-generic32 --openssldir="${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk" > "${LOG}" 2>&1 sed -ie "s!^CFLAG=!CFLAG=-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVERSION}.sdk !" "Makefile" # remove sig_atomic for iPhoneOS sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" "crypto/ui/ui_openssl.c" make >> "${LOG}" 2>&1 make install >> "${LOG}" 2>&1 make clean >> "${LOG}" 2>&1 ############# ############# # iPhoneOS armv7 echo "Building openssl for iPhoneOS ${SDKVERSION} armv7" echo "Please stand by..." export CC="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -arch armv7" mkdir -p "${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk" LOG="${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk/build-openssl-${VERSION}.log" ./configure BSD-generic32 --openssldir="${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk" >> "${LOG}" 2>&1 sed -ie "s!^CFLAG=!CFLAG=-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVERSION}.sdk !" "Makefile" # remove sig_atomic for iPhoneOS sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" "crypto/ui/ui_openssl.c" make >> "${LOG}" 2>&1 make install >> "${LOG}" 2>&1 make clean >> "${LOG}" 2>&1 ############# echo "Build library..." lipo -create ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk/lib/libssl.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk/lib/libssl.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk/lib/libssl.a -output ${CURRENTPATH}/libssl.a lipo -create ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk/lib/libcrypto.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv6.sdk/lib/libcrypto.a ${CURRENTPATH}/bin/iPhoneOS${SDKVERSION}-armv7.sdk/lib/libcrypto.a -output ${CURRENTPATH}/libcrypto.a mkdir -p ${CURRENTPATH}/include cp -R ${CURRENTPATH}/bin/iPhoneSimulator${SDKVERSION}.sdk/include/openssl ${CURRENTPATH}/include/ echo "Building done." 解决方法
它已在
openssl上记录为问题.
调整配置行: ./Configure darwin64-x86_64-cc zlib no-asm no-krb5 shared (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |