8
votes

Faire face à une erreur de lipo tout en créant un fichier de graisse unique

J'essaie de créer un seul fichier .a qui contiendra 3 fichiers .a différents afin que je puisse partager un seul fichier .a. C'est la commande que j'utilise xxx

mais je reçois cette erreur de lipo:

./ libinput1.lib et ./libinput2.lib avoir les mêmes architectures (I386) et ne peut pas être dans le même fichier de sortie gras

aucune idée de la façon de vous débarrasser de cela?


1 commentaires

Soyez prudent avec les en-têtes. Si les en-têtes ont des paramètres / architecture des informations spécifiques (disons, de la configuration), les en-têtes ne seront cohérents que par la dernière version, et toutes les constructions ne sont pas toutes. Pour une solution de contournement, voir est-il sûr de construire la bibliothèque CURL comme multiple arche? . Vous pouvez utiliser la même solution de contournement pour OpenSSL.


5 Réponses :


4
votes

Je viens d'avoir le même message d'erreur, et cela était dû au fait que j'avais mon architecture réglée sur "Autre" et que j'ai saisi en Arm6. Pour résoudre le problème, je modifiais simplement mon paramètre d'architecture à l'une des valeurs par défaut, dans mon cas, je cueille la norme (Arm6 Arm7). Le paramètre Architectures peut être trouvé dans vos paramètres de construction de projet.


0 commentaires

5
votes

C'est donc la deuxième fois que je suis ici. La réponse n'a pas résolu mon problème. Ce que j'ai trouvé, c'est que c'est en fait un bogue en Xcode. Ce qui s'est passé les deux fois, c'est que je viens de trouver cette réponse et ce n'est pas mon problème, puis je suis en train de jouer pendant des heures à essayer de comprendre ce qui se passe et la prochaine chose que je connais des accidents de Xcode. Ouvrez Xcode à nouveau et magique Le problème est parti.

Alors j'ajoute ma réponse pour m'aider à me souvenir de cette prochaine fois.


1 commentaires

Échoue pour moi comme le fait le script d'échantillon. Lipo ne peut pas créer de fichier de sortie temporaire.



5
votes

Une solution de contournement qui a travaillé pour moi (car je ne pouvais pas comprendre quelle partie du processus de construction créait une cible d'architecture supplémentaire à la compilation): élimine simplement l'architecture de l'une des deux bibliothèques .a.

Tout d'abord, vous pouvez répertorier l'architecture avec une commande em> fichier em> p>

lipo -remove i386 libwhatever.a -output /tmp/libwhatever.a
mv /tmp/libwhatever.a libwhatever.a


1 commentaires

J'ai mis à jour XCode12, obtenez une erreur de liaison à partir de l'application à l'aide de la liberme créée. Erreur - Bâtiment pour iOS Simulator, mais reliant dans le fichier d'objet construit pour MacOS, fichier .a pour architecture x86_64 . Comment puis-je le réparer?



2
votes

OK, je l'ai eu du travail. Voici ma version (totale) du script d'exécution xxx


1 commentaires

Échoue pour moi comme le fait le script d'échantillon. Lipo ne peut pas créer de fichier de sortie temporaire.



0
votes

Allez la cible Yourlibuniversal / Construire des phases / Exécuter script

Regardez si le script mentionne simulator_dir_32 et simulator_dir_64 Si oui, retirez les références de ces thèses et il suffit de définir une référence simulator_dir p>

J'ai eu: p> xxx pré>

Je l'ai changé à cela: p>

SIMULATOR_DIR=${SYMROOT}/${CONFIGURATION}-iphonesimulator-x86_64
...
lipo -create "${DEVICE_DIR}/lib${LIB_NAME}.a" "${SIMULATOR_DIR}/lib${LIB_NAME}.a" -output "${INSTALL_DIR}/lib${LIB_NAME}Universal.a"


0 commentaires