2017-09-14 3 views
0

Je rencontre de sérieuses difficultés pour créer libcurl sous Mac OSX version 10.12.6.Création de libcurl sur MacOSX avec prise en charge 32 bits et version OpenSSL personnalisée

J'ai besoin d'une version spécifique de la bibliothèque statique (7.40.0), liée à une version spécifique d'OpenSSL (1.0.2c), avec une prise en charge de l'architecture 32 bits.

Je trouve le code source sur le site officiel et exécuté le script de configuration qui me semblait les paramètres corrects:

curl-7.40.0> CPPFLAGS="-I/Users/me/Documents/Projects/3rdparty/openssl/MacOSX/openssl-1.0.2c/include/" 
LDFLAGS="-L/Users/Documents/Projects/3rdparty/openssl/MacOSX/openssl-1.0.2c/" 
./configure --disable-shared --build=i386-darwin --with-ssl 

où:

  • CPPFLAGS spécifie le dossier de OpenSSL en-têtes;
  • LDFLAGS spécifie le dossier des bibliothèques OpenSSL (libssl.a, libcrypto.a);
  • --disable-shared désactive la construction de la bibliothèque dynamique (pas de sortie libcurl.dylib);
  • --build=i386-darwin configure la construction pour les architectures cibles Apple 32 bits;
  • --with-ssl active les options SSL.

Cependant, cet appel échoue pour deux raisons:

  1. Regarder dans la sortie de configuration, je lis que « host system type » est réglé sur i386-darwin, comme la cible. Je peux résoudre ce problème en spécifiant que --host=x86_64-darwin;
  2. Je reçois que SSL est en fait pas activé:

    configure: WARNING: SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more. 
    configure: WARNING: Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this. 
    

Bien sûr, je peux résoudre ce problème en spécifiant --with-darwinssl, mais quand je fais, je reçois l'avertissement suivant:

ld: warning: directory not found for option '-L/Users/me/Documents/Projects/3rdparty/openssl/MacOSX/openssl-1.0.2c' 

Et la bibliothèque OpenSSL que j'essaie de lier est ignorée.

Enfin, si je tente de supprimer CFLAGS et LDFLAGS pour SSL (juste pour voir si les travaux d'appels simples):

./configure --build=i386-darwin --disable-shared --with-darwinssl 

Quand je fais, les scripts se terminent bien configure et make. Si je tente d'inclure les curl-têtes dans un code source exemple:

#import <Foundation/Foundation.h> 
#include "curl/curl.h" 

et spécifiez le répertoire curl-7.40.0/include dans le chemin de recherche XCode en-têtes, je reçois des questions sémantiques:

curl-7.40.0/include/curl/curlrules.h:143:6: '__curl_rule_01__' declared as an array with a negative size 
curl-7.40.0/include/curl/curlrules.h:153:6: '__curl_rule_02__' declared as an array with a negative size 

J'ai trouvé le problème décrit here . Si je vais vérifier les curlbuild.h#define s, je trouve que le CURL_SIZEOF_LONG est 8, mais est définitivement défini. Le projet est compilé avec Architecture i386.

Enfin, si je tente de simplifier les choses encore plus et exécuter un agnostique:

./configure --disable-shared --with-darwinssl 

et changer l'architecture exemple de projet de retour à Universal 32/64 bits, quand je lien que je reçois un tas d'erreurs étranges :

"_ber_free", referenced from: 
"_inflate", referenced from: 
"_inflateEnd", referenced from: 
"_inflateInit2_", referenced from: 
"_inflateInit_", referenced from: 
"_ldap_err2string", referenced from: 
"_ldap_first_attribute", referenced from: 
"_ldap_first_entry", referenced from: 
"_ldap_free_urldesc", referenced from: 
"_ldap_get_dn", referenced from: 
"_ldap_get_values_len", referenced from: 
"_ldap_init", referenced from: 
"_ldap_memfree", referenced from: 
"_ldap_msgfree", referenced from: 
"_ldap_next_attribute", referenced from: 
"_ldap_next_entry", referenced from: 
"_ldap_search_s", referenced from: 
"_ldap_set_option", referenced from: 
"_ldap_simple_bind_s", referenced from: 
"_ldap_unbind_s", referenced from: 
"_ldap_url_parse", referenced from: 
"_ldap_value_free_len", referenced from: 
"_zlibVersion", referenced from: 

Je suis probablement soit manquer quelque chose d'évident ici, ou manquant beaucoup de petites briques le long du chemin. De toute façon, je suis complètement perdu et je me demande si ma tâche est réellement réalisable.

je pouvais «recompiler l'ensemble de l'application en 64 bits, mais je dois probablement cette version de libcurl et que version d'OpenSSL, et si je ne peux même pas un exemple d'application va il n'y a pas de point dans passer à la chose réelle (si vous êtes curieux de savoir pourquoi j'ai besoin de cette configuration, vérifiez my other thread about libcurl problems: le client Windows n'a aucun problème à se connecter et utilise la configuration susmentionnée).

Voyez-vous une erreur évidente que je fais? Toute aide ou question éclairante sera grandement appréciée.

Répondre

0

En fait, j'ai raté plusieurs étapes, mais suivons les problèmes chronologiquement.

1) compilation OpenSSL

Je rebâti OpenSSL et INSTALLÉ dans mon dossier Documents, en cours d'exécution:

./configure no-shared --openssldir=~/Documents/openssl-lib darwin-i386-cc 
make 
make install 

L'étape INSTALLER ajouté le dossier "lib" nécessaire par l'éditeur de liens.

2) Compilation libcurl

Avant de compiler effectivement libcurl je devais installer pkg-config:

brew install pkg-config 

Alors je lui ai donné la commande de configuration correcte:

CPPFLAGS="-I/Users/me/Documents/openssl-lib -I/Users/me/Documents/openssl-lib/include" 
LDFLAGS="-L/Users/me/Documents/openssl-lib/lib" LIBS="-ldl -lpthread" 
CFLAGS="-arch i386" 
./configure --with-ssl=/Users/me/Documents/openssl-lib 
    --disable-sharing -build=i386-darwin 

Maintenant, les openssl options sont correctement configuré, car:

  1. pkg-config est installé;
  2. J'ai ajouté un CFLAGS -arch i386

Une fois lié à la version OpenSSL correcte ...

Le travail n'a pas été fait encore! Parce que je devais encore lier des binaires dans mon application de test.En plus libcurl je devais créer un lien

  1. openssl (oui, encore une fois)
  2. LDAP (XCode comprend un cadre pour cela)
  3. zlib (ajout d'un "autre compilateur Option" -lz

Après qui, mon programme de test correctement connecté avec Cloudfront et a montré la bonne version curl