Je viens de mettre à jour Xcode 8 et je ne peux plus créer d'applications basées sur xml2. Si je construis un fichier simple et essayez de le construire comme suit:
c++ myapp.cc `xml2-config --cflags` `xml2-config --libs`
...Je reçois le message d'erreur suivant:
ld: file not found: /usr/lib/system/libsystem_symptoms.dylib for architecture x86_64
Peu importe ce que contient myapp.cc (le mien est simplement une routine principale qui renvoie 0). Le problème fondamental semble être que Apple a supprimé /usr/lib/system/libsystem_symptoms.dylib dans Xcode 8, mais de nombreux fichiers .tbd dans /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/ Les SDK/MacOSX10.12.sdk/usr/lib le pointent toujours. Quelqu'un d'autre a-t-il rencontré un problème comme celui-ci?
@mnencia answer supprime les références à libsystem_symptomps.dylib, mais a échoué pour moi sous OS X. Les modifications suivantes devraient lui permettre de fonctionner sous OS X:
Sudo /usr/bin/sed -i.backup -E -e 's@/usr/lib/system/libsystem_symptoms.dylib(, )?@@' \
$(grep -ril /usr/lib/system/libsystem_symptoms.dylib \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib)
J'espère que cela aide les développeurs Mac.
Jusqu'à ce que Xcode8 se stabilise, je conserve Xcode7.3, renommé en
/Applications/Xcode7.3.app/
Généralement j'utilise Xcode8 qui est dans
/Applications/Xcode.app/
mais quand je rencontre de telles erreurs, j’ai la possibilité de
Sudo xcode-select -switch /Applications/Xcode7.3.app/
Cela a guéri l'erreur
ld: file not found: /usr/lib/system/libsystem_symptoms.dylib for architecture x86_64
pour moi, lors de la tentative d'installation d'un paquet R:
> install.packages('clickstream')
C'est un bug de XCode 8.
En attendant un correctif correct de la part d’Apple, la commande suivante supprime la référence à la bibliothèque manquante des fichiers tbd.
Sudo /usr/bin/sed -i.backup 's@/usr/lib/system/libsystem_symptoms.dylib\(, \)\?@@' \
$(grep -ril /usr/lib/system/libsystem_symptoms.dylib \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib)
Je ne sais pas si cela fonctionnera pour tous les types de construction, mais il a été résolu que tout ne fonctionnait pas pour moi.
Un correctif que j'ai utilisé, qui évite toute utilisation de Sudo, consiste simplement à filtrer les éléments -L/Applications/Xcode.app/Sommaire/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12. drapeau sdk/usr/lib. Dans un fichier makefile GNU, vous pouvez le faire à l'aide de la commande filter-out. Donc, si je construis une variable LINK_LIBS, qui comprend $ (Shell xml2-config --libs), je peux alors filtrer LINK_LIBS avec la commande suivante:
LINK_LIBS := $(filter-out -L$(Shell xcrun --show-sdk-path)/usr/lib, $(LINK_LIBS))
Si j'utilise seulement xml2-config, je peux aussi simplement ajouter un argument "--exec-prefix =/usr" lorsque je l'appelle:
c++ myapp.cc `xml2-config --cflags` `xml2-config --exec-prefix=/usr --libs`
Je ne sais pas quels sont les effets secondaires potentiels de la suppression du chemin du SDK de la chaîne de recherche de la bibliothèque, mais pour le moment, ces solutions semblent fonctionner pour toutes mes applications.
La réponse de @ mnencia presque a fonctionné pour moi, mais la commande sed n'a rien remplacé dans les fichiers TLB - les sauvegardes étaient identiques aux fichiers modifiés.
J'ai exécuté cette partie de sa commande:
grep -ril /usr/lib/system/libsystem_symptoms.dylib /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib
Qui a identifié les fichiers référençant la bibliothèque supprimée et les a modifiés à la main.
YMMV
Pour les personnes mal à l'aise avec le retrait des références à libsystem_symptoms.dylib
de divers emplacements, j'ai proposé une autre solution qui serait le contraire de la suppression des références: l'ajout d'un faux libsystem_symptoms.dylib
vide dans /usr/lib/system
!
mkdir ~/src/libempty
cd ~/src/libempty
touch empty.c
cc -dynamiclib empty.c -o libempty.dylib
Sudo cp libempty.dylib /usr/local/lib/libempty.dylib
cd /usr/lib/system
Sudo ln -s /usr/local/lib/libempty.dylib libsystem_symptoms.dylib
Sauf que ... cette dernière étape ne fonctionne pas à cause de OS X/macOS Protection de l'intégrité du système .
Il y a apparemment plus d'un moyen de contourner cela. vous pouvez le désactiver en utilisant csrutil
et en redémarrant (voir la question Opération non autorisée à la racine El capitan ). Je ne veux pas vraiment le désactiver (ou oublier de le réactiver), alors j'ai démarré en recovery mode , puis j'ai ouvert une fenêtre de terminal et terminé le travail de cette façon:
cd /Volumes
cd MyHardDrive
cd usr/lib/system
ln -s ../../local/lib/libempty.dylib libsystem_symptoms.dylib
Avant cela, j’essayais de compiler PostgreSQL 9.6 sur El Capitan et j’obtenais cette erreur d’éditeur de liens ("ld: file not found: /usr/lib/system/libsystem_symptoms.dylib"
) à l’étape configure
lorsqu’elle vérifiait les bibliothèques readline ou zlib. Après cela, PostgreSQL a configuré et construit en douceur!