2016-09-16 121 views
16

我剛剛更新到Xcode 8,我不能再構建基於xml2的應用程序。如果我建立一個簡單的文件,並嘗試建立它,如下所示:libsystem_symptoms.dylib在Xcode 8中丟失

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在Xcode 8中刪除了/usr/lib/system/libsystem_symptoms.dylib,但是/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/中的很多.tbd文件SDK/MacOSX10.12.sdk/usr/lib仍然指向它。有沒有其他人遇到這樣的問題?

+0

我做了一個臨時修復/usr/lib/system/libsystem_symptoms.dylib到/usr/lib/libSystem.dylib,看起來這樣可以讓這些構建工作。這當然不是一個正確的解決方案,而是一種臨時解決方案,能夠在實際解決方案到來之前構建內容。你需要先禁用SIP(網上有很多關於如何操作的信息)。 – StasM

回答

3

這是一個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) 

我不知道它是否適用於所有類型的構建,但它修復了一切對我而言不起作用。

+0

我試過這個,並去了以下錯誤:grep:/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib:沒有這樣的文件或目錄 sed : : 無此文件或目錄。有什麼想法嗎?/usr/lib目錄確實存在(即時運行相同版本的macOS) – Sanfly

+0

也許sdk路徑是不同的。嘗試搜索/Applications/Xcode.app文件夾中的.tbd文件。 – mnencia

+0

這找到了所有正確的文件,但替換無效 - 備份文件與更改的文件相同。 –

2

我已經使用了一個避免使用sudo的「修復」,只是簡單地過濾掉-L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib標誌。在GNU makefile中,這可以使用filter-out命令完成。

LINK_LIBS := $(filter-out -L$(shell xcrun --show-sdk-path)/usr/lib, $(LINK_LIBS)) 

如果我只是用XML2-配置,我可以:如果我建一個LINK_LIBS變量,包括$(殼XML2-配置--libs),那麼我可以用下面的命令過濾LINK_LIBS

c++ myapp.cc `xml2-config --cflags` `xml2-config --exec-prefix=/usr --libs` 

我不知道有什麼潛在的副作用,從庫中搜索字符串移除SDK路徑可能是,但對:也只是調用它時添加一個「--exec-PREFIX =/USR」的說法現在,這些解決方案似乎適用於我的所有應用程序。

1

@ 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

確定哪些引用刪除庫中的文件,並通過人工修飾它們。

因人而異

14

@mnencia答案刪除的作品引用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開發人員。

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')

0

對於任何不舒服剝離出來引用libsystem_symptoms.dylib從不同位置,我想出了另一種解決方案,它的對面刪除參考文獻 - 在/usr/lib/system中添加假空libsystem_symptoms.dylib

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 System Integrity Protection,最後一步不起作用。

顯然有不止一種方法來解決這個問題;您可以使用csrutil將其禁用並重新啓動(請參閱問題Operation Not Permitted when on root El capitan)。我真的不希望禁用它(或忘記重新打開它),所以我啓動到recovery mode,然後打開一個終端窗口,完成這項工作是這樣的:

cd /Volumes 
cd MyHardDrive 
cd usr/lib/system 
ln -s ../../local/lib/libempty.dylib libsystem_symptoms.dylib 

之前這樣做,我試圖在El Capitan上構建PostgreSQL 9.6,並且在檢查readline或zlib庫時,在步驟configure處獲得該鏈接器錯誤("ld: file not found: /usr/lib/system/libsystem_symptoms.dylib")。這樣做後,PostgreSQL配置和構建順利!