2016-09-16 114 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配置和构建顺利!