Myr*_*tol 4 xcode frameworks dyld
我是Xcode和Objective-C的新手,但是他是一位经验丰富的(网络)程序员.我想创建一个包含自制框架的应用程序.
现在我已经阅读了很多内容,我想我已经合理地掌握了OS X如何在运行时解析依赖关系,以及@rpath,@ executable_path和@loader_path的角色.
我做了以下创建框架:
我做了以下创建应用程序:
当我选择运行时,我在构建期间收到以下警告:
构建目标TestApp
Ld /Users/meryn/Library/Developer/Xcode/DerivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz/Build/Products/Debug/TestApp.app/Contents/MacOS/TestApp normal x86_64 cd/Users/meryn/Work/test-app/TestApp setenv MACOSX_DEPLOYMENT_TARGET 10.8 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10 .8.ddk -L/Users/meryn/Library/Developer/Xcode/DerivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz/Build/Products/Debug -F/Users/meryn/Library/Developer/Xcode/DerivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz/Build/Products/Debug -F/Users/meryn/Work/test-app/TestApp"-F @ executable_path /../ Frameworks"-filelist/Users/meryn/Library/Developer/Xcode/DerivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz/Build/Intermediates/TestApp.build/Debug/TestApp.build/Objects-normal/x86_64/TestApp.LinkFileList -mmacosx-version-min = 10.8 -fobjc-arc -fobjc-link-runtime -framework Cocoa -framework Test -o /Users/meryn/Library/Developer/Xcode/DerivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz/Build/Products/Debug/TestApp.app/Contents/MacOS/TestApp
ld:警告:找不到选项'-F @ executable_path /../ Frameworks'的目录
我可以想象这个警告是可以预料的,因为Ld可能根本不知道"@executable_path".它是否正确?
随后,运行应用程序失败:
dyld:未加载库:@ rpath/Test.framework/Versions/A/Test引用自:/Users/meryn/Library/Develorator/Xcode/DelivedData/TestApp-ajwvknoonliuqqfaqxacxrmapyfz/Build/Products/Debug/TestApp.app/Content/MacOS/TestApp原因:找不到图像
奇怪的是,TestApp.app包确实包含一个Frameworks目录,里面有Test.framework目录.鉴于我对OS X如何搜索依赖关系的理解,我认为我添加的搜索路径应该可以解决.
这是在XCode 4.6,OS X 10.8上.
otool -L TestApp 给
TestApp:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa(兼容版本1.0.0,当前版本19.0.0)
@ rpath/Test.framework/Versions/A/Test(兼容版本1.0.0,当前版本1.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation(兼容版本300.0.0,当前版本945.11.0)
/usr/lib/libobjc.A.dylib(兼容版本1.0.0,当前版本228.0.0)
/usr/lib/libSystem.B.dylib(兼容版本1.0.0,当前版本169.3.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit(兼容版本45.0.0,当前版本1187.33.0)
可以在这里看到"@rpath"未扩展吗?
我究竟做错了什么?
由于库标识符设置为@rpath-prefixed路径,因此链接到库的应用程序需要指定一个或多个-rpath选项,指示在运行时搜索库dyld时应替换@rpath变量的内容.一个典型的值是,@loader_path/../Frameworks如果你正在复制你的框架TestApp.app/Contents/Frameworks.您可以-rpath使用LD_RUNPATH_SEARCH_PATHSTestApp目标上Xcode中的('Runpath Search Paths')配置设置来设置参数的值.
我可以想象这个警告是可以预料的,因为Ld可能根本不知道"@executable_path".它是否正确?
添加@executable_path/../Frameworks到Xcode的框架搜索路径没有用.框架搜索路径是静态链接器(ld)的构建时概念,而@executable_path变量是动态链接器(dyld)的运行时概念.
| 归档时间: |
|
| 查看次数: |
4853 次 |
| 最近记录: |