Libsystem_symptoms.dylib отсутствует в Xcode 8
Я просто обновился до Xcode 8, и я больше не могу создавать приложения на основе xml2. Если я создаю простой файл и попытаюсь его построить следующим образом:
c++ myapp.cc `xml2-config --cflags` `xml2-config --libs`
... Появляется следующее сообщение об ошибке:
ld: file not found: /usr/lib/system/libsystem_symptoms.dylib for architecture x86_64
Не важно, что в myapp.cc(моя - просто основная процедура, которая возвращает 0). Коренная проблема заключается в том, что Apple удалила /usr/lib/system/libsystem _symptoms.dylib в Xcode 8, но многие из .tbd файлов в /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDK/MacOSX10.12.sdk/usr/lib все еще указывают на это. Кто-нибудь еще сталкивается с такой проблемой?
Ответы
Ответ 1
@mnencia answer работает, удаляя ссылки на libsystem_symptomps.dylib, но мне не удалось использовать OS X. Изменить следующее должно позволить ему работать с OS X:
sudo /usr/bin/sed -i.backup -E -e '[email protected]/usr/lib/system/libsystem_symptoms.dylib(, )[email protected]@' \
$(grep -ril /usr/lib/system/libsystem_symptoms.dylib \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib)
Надеюсь, это поможет разработчикам Mac.
Ответ 2
Это ошибка XCode 8.
В ожидании правильного исправления от Apple следующая команда удаляет ссылку на отсутствующую библиотеку из файлов tbd.
sudo /usr/bin/sed -i.backup '[email protected]/usr/lib/system/libsystem_symptoms.dylib\(, \)\[email protected]@' \
$(grep -ril /usr/lib/system/libsystem_symptoms.dylib \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib)
Я не знаю, будет ли он работать для всех видов сборки, но он исправил, что все не работает для меня.
Ответ 3
Пока Xcode8 не стабилизируется, я сохраняю Xcode7.3, переименованный в
/Applications/Xcode7.3.app/
Обычно я использую Xcode8, который находится в
/Applications/Xcode.app/
но при возникновении таких ошибок у меня есть опция
sudo xcode-select -switch /Applications/Xcode7.3.app/
Это вылечило ошибку
ld: file not found: /usr/lib/system/libsystem_symptoms.dylib for architecture x86_64
для меня при попытке установить пакет R:
> install.packages('clickstream')
Ответ 4
Одно "исправление", которое я использовал, которое позволяет избежать использования sudo, - это просто отфильтровать -L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDK/MacOSX10.12.sdk/usr/lib flag. В make файле GNU это можно сделать с помощью команды filter-out. Поэтому, если я создаю переменную LINK_LIBS, которая включает в себя $(shell xml2-config -libs), тогда я могу фильтровать LINK_LIBS с помощью следующей команды:
LINK_LIBS := $(filter-out -L$(shell xcrun --show-sdk-path)/usr/lib, $(LINK_LIBS))
Если я просто использую xml2-config, я могу просто добавить аргумент "-exec-prefix =/usr" при его вызове:
c++ myapp.cc `xml2-config --cflags` `xml2-config --exec-prefix=/usr --libs`
Я не знаю, какие потенциальные побочные эффекты удаления пути SDK из строки поиска библиотеки могут быть, но на данный момент эти решения работают для всех моих приложений.
Ответ 5
@mnencia ответ почти сработал у меня, но команда sed ничего не заменила в файлах TLB - резервные копии были такими же, как и измененные файлы.
Я выполнил эту часть своей команды:
grep -ril /usr/lib/system/libsystem_symptoms.dylib /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib
Определили файлы, ссылающиеся на удаленную библиотеку, и изменили их вручную.
YMMV
Ответ 6
Для тех, кому неудобно удалять ссылки на libsystem_symptoms.dylib
из разных мест, я придумал другое решение, которое противоположно удалению ссылок - добавление поддельного пустого libsystem_symptoms.dylib
в /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
За исключением того, что последний шаг не работает из-за OS X/macOS Защита целостности системы.
По-видимому, существует более одного способа обойти это; вы можете отключить его с помощью csrutil
и перезагрузки (см. вопрос Операция Не разрешена, когда на корневом сервере El capitan). Я действительно не хочу его отключать (или забыть включить его), поэтому я загрузился в режим восстановления, а затем открыл и закончил работу следующим образом:
cd /Volumes
cd MyHardDrive
cd usr/lib/system
ln -s ../../local/lib/libempty.dylib libsystem_symptoms.dylib
Прежде чем это сделать, я пытался построить PostgreSQL 9.6 на El Capitan и получал эту ошибку компоновщика ("ld: file not found: /usr/lib/system/libsystem_symptoms.dylib"
) на шаге configure
, когда он проверял библиотеки readline или zlib. После этого PostgreSQL настроен и построен плавно!
Ответ 7
Последнее обновление от geoHeil на https://github.com/igraph/rigraph/issues/173 помогло мне решить эту проблему в OSX.
Это было так просто, как эти два шага:
Terminal> brew uninstall suite-sparse --ignore-dependencies
R> install.packages("igraph")
ignore-dependencies
были необходимы, потому что у Octave была зависимость от suite-sparse.