我有一个示例项目 https://github.com/Usipov/SwiftAutoFrameworksLinkage由一个主要目标(LinkerTests
)和一个依赖的动态框架(Dynamic
).
如果运行该项目,您将看到以下 dyld 二进制加载:
dyld: loaded: {DerivedDataPath}/Build/Products/Debug-iphonesimulator/Dynamic.framework/Dynamic
这个 dyld 二进制加载发生的原因是import Dynamic
in AppDelegate.swift
尽管存在以下情况:
-
Link Binary With Libraries
构建阶段为空
-
CLANG_MODULES_AUTOLINK
设置为 false
我需要实现的是避免这种自动隐式链接。
这可能吗?提前致谢!
相关问题:我们不再需要将框架链接到 XCode 项目了吗? https://stackoverflow.com/questions/24902787/dont-we-need-to-link-framework-to-xcode-project-anymore
显然这个功能被称为自动链接。 Swift 编译器隐式发出额外的链接器标志,链接源代码所依赖的所有模块(import Dynamic
).
没有办法完全禁用它。但是有一个私有编译器标志允许您禁用单个框架的自动链接:swiftc -disable-autolink-framework <framework>
.
一些参考:https://gist.github.com/zrzka/c89705ff634ea01aebc1 https://gist.github.com/zrzka/c89705ff634ea01aebc1
https://github.com/niw/automatic_linking_tool/blob/master/README.md https://github.com/niw/automatic_linking_tool/blob/master/README.md
我很确定您可以附加-v
to swiftc
它会将所有底层调用打印为命令。希望您也能够看到链接器调用。
你应该将私有标志包裹在两个里面-Xfrontend
允许使用它的标志:
OTHER_SWIFT_FLAGS = "-Xfrontend -disable-autolink-framework -Xfrontend Dynamic"
要使其生效,您仍然必须设置自动链接框架Apple Clang - 语言 - 模块下没有。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)