Cocos构建iOS项目,接入AdMob的SDK编译报Assertion failed: (it != _dylibToOrdinal.end()), function dylibToOrdinal, file OutputFile.cpp, line 5196.

我用了官方给的插件,发现激励视频不能播放,自动,依赖和手动每次都是到最后一步构建app,报错,有没有大佬知道怎么改的?可有偿

1赞

这。。直接问AI吧 估计是SDK跟XCODE版本不匹配。

大佬,解决了吗?

前排等解决方案,因为过两天我也想用这个admob插件。哈哈哈

使用这个办法解决了。笑死,花了我一整天

我也被这个问题个搞了一一整天了

根据搜索结果,这不是 AdMob 13.3.0 本身的 bug,而是 Xcode 26 链接器的已知问题。多个社区和官方渠道已确认。


结论:Xcode 26 的链接器 Bug

这个错误:

Assertion failed: (it != _dylibToOrdinal.end()), function dylibToOrdinal, file OutputFile.cpp, line 5196.

是 Xcode 26(ld64/ld_classic)的链接器崩溃,在以下场景都会触发:

项目类型 触发条件
Unity + ARKit Xcode 26 + AR 插件
Unity + AdMob + Vuforia 多框架组合
Firebase + -ld_classic + -ObjC 特定链接标志组合
Facebook SDK 仅 Xcode 26 复现
Godot + AdMob iOS 26 + Xcode 26

共同点:项目依赖多个动态库/框架,链接器在整理 dylib 序号时内部状态不一致导致断言失败。


解决方案(按有效性排序)

方案 1:移除 -ld64 / -ld_classic 链接标志(最有效)

这是社区验证最多的解决方法 :

Xcode → 项目 → Targets → Build Settings
→ 搜索 "Other Linker Flags"
→ 删除以下条目:
    -ld64
    -ld_classic
    -weak-lSystem(如果存在)

注意: 这些标志可能是之前为了兼容旧版 Xcode 或某些插件而添加的,在 Xcode 26 下反而触发链接器 bug。


方案 2:检查 Framework Search Paths 冲突

如果使用了 CocoaPods 或手动引入框架,确保路径不冲突 :

Build Settings → Framework Search Paths

检查是否有:

  • 重复路径
  • 递归通配符 ** 指向重叠目录
  • 同时包含 $(PROJECT_DIR)/Pods/... 和手动拖入的 framework

方案 3:清理并重建

# 1. 关闭 Xcode
# 2. 清理 Derived Data
rm -rf ~/Library/Developer/Xcode/DerivedData

# 3. 清理构建目录
rm -rf /Volumes/xiayangqunT9/personSpace2/ParkourCompetition/build/ios/proj/Debug-iphoneos/

# 4. 如果用 CocoaPods
cd build/ios/proj
rm -rf Pods/ Podfile.lock
pod cache clean --all
pod install

# 5. 重新打开 .xcworkspace 构建

方案 4:尝试切换链接器(实验性)

Xcode 26 引入了新的 -ld_prime 链接器,部分简单项目可用 :

Build Settings → Other Linker Flags
→ 添加 -ld_prime
→ 移除 -ld64 / -ld_classic

但复杂项目可能仍不稳定,优先尝试方案 1。


为什么不是 AdMob 的 Bug?

证据 来源
纯 Unity AR 项目(无 AdMob)也会触发同样错误 Unity Issue Tracker
Firebase 官方确认是 Xcode 26 Beta 链接器问题 Firebase iOS SDK GitHub
Facebook SDK 独立复现 Facebook SDK GitHub
仅 Xcode 26 出现,Xcode 16 正常 多个社区报告

AdMob 13.3.0 只是恰好出现在依赖多个框架的项目中,成为触发条件之一,而非根本原因。


你的 Cocos 项目建议

由于你是 Cocos 3.8.2 + Xcode 26 + AdMob 13.3.0:

  1. 优先检查 Other Linker Flags,删除 -ld64-ld_classic-weak-lSystem
  2. 检查是否重复引入 GoogleMobileAds.framework(CocoaPods + 手动添加)
  3. 清理 Derived Data 后重新构建
  4. 如果仍失败,尝试在 Cocos 构建的 Xcode 工程中,将 libcocos2d.a 和 AdMob 相关库的链接顺序调整(静态库放前面,动态 framework 放后面)

参考

  • Unity Discussions: Xcode 26 linker assertion
  • Firebase iOS SDK GitHub: -ld_classic + -ObjC issue
  • Facebook SDK GitHub: Xcode 26 compile error
  • Unity Issue Tracker: ARKit + Xcode 26

我的解决方案是首先要
用CocoaPOds 添加依赖
先检查一下Ruby 版本是不是 4.0.2 如果不是更新一下
cd 项目/proj 中进行如下操作
pod init 初始化一个podfile,并且修改一下内容
# Uncomment the next line to define a global platform for your project
platform :ios, ‘13.0’
target ‘boost_container’ do

Comment the next line if you don’t want to use dynamic frameworks

use_frameworks!

Pods for boost_container

end
target ‘cocos_engine’ do

Comment the next line if you don’t want to use dynamic frameworks

use_frameworks!

Pods for cocos_engine

end
target ‘dinokeno’ do

Comment the next line if you don’t want to use dynamic frameworks

use_frameworks!

Pods for 项目名

pod ‘Google-Mobile-Ads-SDK’
end

然后在控制台执行下载pod install --repo-update

就不报了,cocos用的是3.8.7Xcode是能从app story下载的最新版本
上传审核的时候可会报一个关于arm64和x86_64的错,修改一下.a文件就行

大佬nb,写的比我详细

我靠,兄弟解决了。我也碰到这个问题。但是解决不了。

根据搜索结果,这不是 AdMob 13.3.0 本身的 bug,而是 Xcode 26 链接器的已知问题。多个社区和官方渠道已确认。


结论:Xcode 26 的链接器 Bug

这个错误:

Assertion failed: (it != _dylibToOrdinal.end()), function dylibToOrdinal, file OutputFile.cpp, line 5196.

是 Xcode 26(ld64/ld_classic)的链接器崩溃,在以下场景都会触发:

项目类型 触发条件
Unity + ARKit Xcode 26 + AR 插件
Unity + AdMob + Vuforia 多框架组合
Firebase + -ld_classic + -ObjC 特定链接标志组合
Facebook SDK 仅 Xcode 26 复现
Godot + AdMob iOS 26 + Xcode 26

共同点:项目依赖多个动态库/框架,链接器在整理 dylib 序号时内部状态不一致导致断言失败。


解决方案(按有效性排序)

方案 1:移除 -ld64 / -ld_classic 链接标志(最有效)

这是社区验证最多的解决方法 :

Xcode → 项目 → Targets → Build Settings
→ 搜索 "Other Linker Flags"
→ 删除以下条目:
    -ld64
    -ld_classic
    -weak-lSystem(如果存在)

注意: 这些标志可能是之前为了兼容旧版 Xcode 或某些插件而添加的,在 Xcode 26 下反而触发链接器 bug。


方案 2:检查 Framework Search Paths 冲突

如果使用了 CocoaPods 或手动引入框架,确保路径不冲突 :

Build Settings → Framework Search Paths

检查是否有:

  • 重复路径
  • 递归通配符 ** 指向重叠目录
  • 同时包含 $(PROJECT_DIR)/Pods/... 和手动拖入的 framework

方案 3:清理并重建

# 1. 关闭 Xcode
# 2. 清理 Derived Data
rm -rf ~/Library/Developer/Xcode/DerivedData

# 3. 清理构建目录
rm -rf /Volumes/xiayangqunT9/personSpace2/ParkourCompetition/build/ios/proj/Debug-iphoneos/

# 4. 如果用 CocoaPods
cd build/ios/proj
rm -rf Pods/ Podfile.lock
pod cache clean --all
pod install

# 5. 重新打开 .xcworkspace 构建

方案 4:尝试切换链接器(实验性)

Xcode 26 引入了新的 -ld_prime 链接器,部分简单项目可用 :

Build Settings → Other Linker Flags
→ 添加 -ld_prime
→ 移除 -ld64 / -ld_classic

但复杂项目可能仍不稳定,优先尝试方案 1。


为什么不是 AdMob 的 Bug?

证据 来源
纯 Unity AR 项目(无 AdMob)也会触发同样错误 Unity Issue Tracker
Firebase 官方确认是 Xcode 26 Beta 链接器问题 Firebase iOS SDK GitHub
Facebook SDK 独立复现 Facebook SDK GitHub
仅 Xcode 26 出现,Xcode 16 正常 多个社区报告

AdMob 13.3.0 只是恰好出现在依赖多个框架的项目中,成为触发条件之一,而非根本原因。


你的 Cocos 项目建议

由于你是 Cocos 3.8.2 + Xcode 26 + AdMob 13.3.0:

  1. 优先检查 Other Linker Flags,删除 -ld64-ld_classic-weak-lSystem
  2. 检查是否重复引入 GoogleMobileAds.framework(CocoaPods + 手动添加)
  3. 清理 Derived Data 后重新构建
  4. 如果仍失败,尝试在 Cocos 构建的 Xcode 工程中,将 libcocos2d.a 和 AdMob 相关库的链接顺序调整(静态库放前面,动态 framework 放后面)

参考

  • Unity Discussions: Xcode 26 linker assertion
  • Firebase iOS SDK GitHub: -ld_classic + -ObjC issue
  • Facebook SDK GitHub: Xcode 26 compile error
  • Unity Issue Tracker: ARKit + Xcode 26