我在链接一个非常复杂的项目时遇到此错误,我需要知道调试它的最佳方法。
我为ld:
打开了以下环境变量export RC_TRACE_ARCHIVES=1
export RC_TRACE_DYLIBS=1
export RC_TRACE_PREBINDING_DISABLED=1
并将-t -whyload -whatsloaded选项添加到ld。
来自ld的最后消息是:
[Logging for XBS] Used indirect dynamic library: /Applications/Xcode6-
Beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/
SDKs/iPhoneOS8.0.sdk/
System/Library/PrivateFrameworks/FaceCore.framework/FaceCore
ld: file not found: /usr/lib/libFosl_dynamic.dylib for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
这是关于如何调试此错误的一般问题,但具体来说,我使用的是XCode 6 beta 4.这可能是导致错误的原因。我需要使用XCode 6来实现其动态框架功能。
有谁知道libFosl_dynamic.dylib是什么?任何人都可以提供有关如何确定哪个对象模块,静态库或其他dylib触发了加载此libFosl_dynamic.dylib模块的要求的信息吗?
我在派生数据目录中grep&#f; ed:
/Users/"user"/Library/Developer/Xcode/
DerivedData/EngineSdkDemo-gbkxniqxsljcxybhbszrwqyrzdwq
找到文件" app" _dependency_info.dat。该文件显然包含将要加载的库列表,从而导致无法找到的库。该文件中的最后一个条目是:
...
/Applications/Xcode6-Beta4.app/Contents/Developer/Platforms/
iPhoneOS.platform/Developer/SDKs/iPhoneOS8.0.sdk/System/
Library/PrivateFrameworks/FaceCore.framework/FaceCore
/Users/<user>/Library/Developer/Xcode/DerivedData/
EngineSdkDemo-gbkxniqxsljcxybhbszrwqyrzdwq/Build/Products/
Debug-iphoneos/libFosl_dynamic.dylib
<Library search path 1>/libFosl_dynamic.dylib
<Library search path 2>/libFosl_dynamic.dylib
<Library search path 3>/libFosl_dynamic.dylib
<Library search path 4>/libFosl_dynamic.dylib
<Library search path 5>/libFosl_dynamic.dylib
...
显然ld正在搜索我的所有图书馆搜索路径,试图找到该文件,但它并不存在于我的Mac上的任何地方。
(2014年8月3日)更多:我在XCode 6 beta 4 iOS 8 frameworks文件夹中查看:
/Applications/Xcode6-Beta4.app/Contents/Developer
/Platforms/iPhoneOS.platform/Developer
/SDKs/iPhoneOS8.0.sdk/System/Library/Frameworks
我在coreimage.framework中找到了一个热门。 MacDepencencies的伟大工具 (here)列出了对/usr/lib/libFosl_dynamic.dylib的依赖关系。显然这是XCode 6 beta 4中的一个错误。该dylib不包含在发行版中。
(8/3/14)更多:我终于找到了一个libFosl_dynamic.dylib文件。它隐藏在XCode iOS 8 SDK文件夹中:
/Applications/Xcode6-Beta4.app/Contents/Developer
/Platforms/iPhoneSimulator.platform/Developer/SDKs
/iPhoneSimulator8.0.sdk/usr/lib
我将文件复制到/ usr / lib。
既然文件本身没有丢失,我从链接器中得到以下新错误:
ld: in '/usr/lib/libFosl_dynamic.dylib', missing required architecture armv7 in file
/usr/lib/libFosl_dynamic.dylib (2 slices) for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
(8/3/14):更多:iOS 8 SDK中的特定文件仅支持i386和X86-64架构。
(8/3/14)更多:当然它只支持i386和X86-64架构!我刚注意到该文件来自iPhoneSimulator.platform。相应的iPhoneOS.platform文件夹中缺少该文件。
(8/3/14)更多:该文件不存在于iPhoneOS.platform文件(模拟器或设备)的XCode 5.1.1版本中。它出现在XCode 6 Beta 2(仅限模拟器)中,这是我拥有的第一个XCode 6 Beta版本。显然,这个问题是在XCode 6中引入的。
谢谢, 鲍勃