gpt4 book ai didi

ios - Pods 库与第一个目标链接两次,如 libPods.a 和 libPods-.a

转载 作者:行者123 更新时间:2023-11-29 10:52:50 25 4
gpt4 key购买 nike

我有一个项目,其中包含两个目标,一个用于 iOS,一个用于 OSX。这是 Podfile 的样子。

# Pods

xcodeproj 'ipolypus.xcodeproj'

pod 'BlocksKit'
pod 'Reachability'
pod 'MKStoreKit'

# Objective C
pod 'libextobjc'
pod 'LinqToObjectiveC'

target :ipolypus, :exclusive => false do
platform :ios, '5.1.1'
pod 'CocoaLumberjack'
pod 'EGOTableViewPullRefresh'
pod 'SVProgressHUD'
pod 'FlurrySDK'

# AdMob SDK and AdMob mediation adapter
pod 'AdMob'
pod 'AdMobMediationAdapterIAd'
end

target :ipolypusTests, :exclusive => true do
pod 'CocoaLumberjack'
end

target :'ipolypus-osx', :exclusive => false do
platform :osx
pod 'CocoaLumberjack'
end

运行 pod install 后,我可以看到两个 Pod 库链接到第一个目标 (ipolypus)。

libPods.alibPods-ipolypus.a

如果我尝试立即构建项目,我会收到奇怪的链接错误,例如缺少 FlurrySDK 符号。

要修复它,我必须从库列表中删除 libPods.alibPods-ipolypus.a 以与目标链接,运行 pod再次安装,然后手动删除第一个目标的libPods.a,然后它将构建和链接。

我制作 Podfile 的方式一定有问题。我查看了相关帖子,没有发现类似的问题。

更新

这里是链接错误

Undefined symbols for architecture i386:
"_OBJC_CLASS_$_Flurry", referenced from:
objc-class-ref in IOSAppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

完成上述步骤后,我将成功构建,直到下一次 pod installpod update

我还应该提到,该项目有一段时间只有单一目标,然后我添加了 OSX 目标并为此修改了 Podfile,这就是问题开始的时候。但是我尝试删除 Podfile.lock 并删除 Pods 文件夹,问题仍然存在。

我遇到了另一种类型的错误,链接器失败是因为已经定义了相同的符号,但我再也看不到那个了。

最佳答案

我找到了“双重链接”问题的原因。正如预期的那样,它是由 Podfile 的结构引起的。因为我想为 OSX 和 iOS 目标提供一些通用的 pod,所以我把它们都放在了开头。

xcodeproj 'ipolypus.xcodeproj'

pod 'BlocksKit'
pod 'Reachability'
pod 'MKStoreKit'

# Objective C
pod 'libextobjc'
pod 'LinqToObjectiveC'

这些普通的pods会在libPods.a库中,另外,CocoaPods不能忍受一些pods库没有链接到一个目标,所以它会链接libPods。 a 针对默认项目目标,在我的示例中它是 ipolypus

然后是为 ipolypus iOS 目标生成的 libPods-ipolypus.a。由于此目标不是唯一的,因此 FlurrySDK 之类的内容将同时包含在 libPods.alibPods-ipolypus.a 中,从而导致符号重复链接时。

在尝试找出使用独占/非独占目标配置的正确方法后,我最终得到了每个目标的单独 pod 列表。可能比我想要的要长一点,但会按预期完成工作。

# Pods

xcodeproj 'ipolypus.xcodeproj'

target :ios, :exclusive => true do
platform :ios, '6.0'
link_with 'ipolypus'

# shared
pod 'CocoaLumberjack'
pod 'Reachability'
pod 'MKStoreKit'
pod 'LinqToObjectiveC'
# pod 'EGOTableViewPullRefresh'

# platform
pod 'SVProgressHUD'
pod 'FlurrySDK'

# AdMob SDK and AdMob mediation adapter
pod 'Google-Mobile-Ads-SDK'
pod 'AdMobMediationAdapterIAd'
end

target :iosTests, :exclusive => true do
platform :ios, '6.0'
link_with 'ipolypusTests'
pod 'OCMock'
end

target :osx, :exclusive => false do
platform :osx, '10.7'
link_with 'ipolypus-osx'

# shared
pod 'CocoaLumberjack'
pod 'Reachability'
pod 'LinqToObjectiveC'
end

target :osxTests, :exclusive => true do
platform :osx, '10.7'
link_with 'ipolypus-osxTests'
pod 'OCMock'
end

关于ios - Pods 库与第一个目标链接两次,如 libPods.a 和 libPods-<targetname>.a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19697801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com