2012-03-01 12 views
5

Sto tentando di eseguire uno script per creare OpenSSL per iOS (armv6, armv7 e i386) come "script di esecuzione" fase in Xcode.Lo script di compilazione OpenSSL fallisce quando viene eseguito come una fase di "script di esecuzione" all'interno di Xcode (riesce all'esterno di Xcode)

Lo script viene creato correttamente quando viene eseguito dalla riga di comando come script autonomo. Il risultato è una directory compilata libcrypto.a, libssl.a e include con le intestazioni.

Tuttavia, quando eseguo lo script come una fase di script di esecuzione in Xcode, si arriva verso la fine di make ed errori dichiarando che non è stato possibile trovare alcun simbolo a cui si fa riferimento da 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 

Sono quasi certo che questo è un problema di percorsi, ma non riesco a capire come dire a Xcode (o dello script), che i percorsi da utilizzare.

Lo script, available here, doveva essere modificato per tenere conto delle recenti modifiche alla posizione degli strumenti di sviluppo con Xcode 4.3 (ovvero il fatto che Developer/non è più nella root, ma in realtà all'interno di Xcode.app) .

Ecco lo script per la domanda di completezza:

#!/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." 

risposta

1

E 'stato registrato come un problema su openssl.

regolare la linea di configurazione:

./Configure darwin64-x86_64-cc zlib no-asm no-krb5 shared 
+2

Questo potrebbe funzionare se stai costruendo per Mac OS X a 64 bit, ma sto tentando di costruire per iOS, (da qui la necessità di armv6, armv7 e i386). Devo specificare 'BSD-generic32' al contrario di' darwin-x86_64' e iOS non consente nemmeno le librerie condivise. Ho provato a configurare con il mio BSD e senza l'opzione condivisa, ma ottengo lo stesso errore che ho affermato nella domanda originale. – Jasarien

1

Anche se questo è un posto più vecchio, penso che il problema ancora persistono. Ma penso di aver trovato una soluzione molto semplice. Basta aggiungere la seguente riga alla Build-Script, prima di "Configura" o "fare" si chiama:

export COMMAND_MODE=unix2003 

Questo dovrebbe fare il trucco.

Problemi correlati