基于iOS 8 SDK链接和金属框架构建的静态库
在构建我使用iOS 8 SDK编写的静态库时,生成的库与金属框架链接:基于iOS 8 SDK链接和金属框架构建的静态库,ios,xcode,Ios,Xcode,在构建我使用iOS 8 SDK编写的静态库时,生成的库与金属框架链接: $ otool -arch all -fl <static library> ... Load command 12 519 cmd LC_LINKER_OPTION 520 cmdsize 32 521 count 2 522 string #1 -framework 523 string #2 Metal ... $otool-arch all-fl ... 加载命令1
$ otool -arch all -fl <static library>
...
Load command 12
519 cmd LC_LINKER_OPTION
520 cmdsize 32
521 count 2
522 string #1 -framework
523 string #2 Metal
...
$otool-arch all-fl
...
加载命令12
519 cmd LC_链接器_选项
520尺寸32
521第2点
522字符串#1-框架
523串#2金属
...
我认为这是通过UIKit实现的;我没有直接链接到它,而“链接到标准库”是否定的。这会导致iOS 7的Xcode 5.1.1出现问题,因为这个框架不存在。使用Xcode 5构建静态库与metal没有关联,但我更愿意使用最新的Xcode产品版本构建静态库,在某个时候我必须解决这个问题。如何使用Xcode 6构建并解决Xcode 5用户的这个问题
另一位开发人员也看到了这个问题,他只是使用了他所需要的特定框架,这些框架没有与Metal链接,但我不能这样做,因为我需要与UIKit链接:
这里是card.io的Dave。即上述“另一个开发者” 我们的解决方案应该适用于您,它是在构建静态库时设置为
NO
两个构建设置:CLANG\u ENABLE\u MODULES
和CLANG\u MODULES\u AUTOLINK
(也称为ENABLE MODULES(C和Objective-C)
和自动链接框架
)
在禁用这些模块设置的情况下构建库将完全消除LC\u LINKER\u选项
命令
使用库的应用程序可以启用或不启用这些模块设置。应用程序(而不是你的库)必须包括
UIKit.framework
等,可以通过模块自动,也可以作为“链接库”手动。那么这是如何工作的呢?静态库只是一堆不包含链接指令的对象文件。这是ios8中的新功能吗?我自己也不太确定,但我相信对象文件指定了需要使用load命令链接的框架。这就是-l选项,它显示对象的加载命令。您能告诉我您是如何将-framework Metal
的LC\u LINKER\u选项引入静态库的吗?我询问的原因是,如果您可以编辑它,您可以将-framework
更改为-weak\u framework
,这可能会解决您的问题。然而,通过阅读您引用的线程,LC\u LINKER\u选项
应该只是为了解决一个未定义的符号,这听起来像是弱链接。谢谢Dave,我错过了作为您的解决方案,我以为你只是使用了你需要的依赖框架,而不是一个伞式框架,其中也包括金属。也许我也应该直呼你的名字;)干杯很高兴我能帮上忙@在构建过程中,您在哪里设置这些标志(除了在Xcode构建设置中手动设置之外)?当我试图在podspec中将它们传递给编译器时(s.compiler\u flags='-CLANG\u ENABLE\u MODULES=NO','-CLANG\u MODULES\u AUTOLINK=NO'
),它们无法识别。@kraftydevil我是在Xcode中手动设置它们的。如果您检查Xcode帮助面板,您将看到它们对应于省略-fmodules
和-fmodules autolink
标志。我不确定podspec是否可以指定省略标志。@kraftydevil如下,s.pod\u target\u xcconfig={'DEFINES\u MODULE'=>'YES','CLANG\u MODULES\u AUTOLINK'=>'YES'}