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.