集成MaxstSDK时出现x86_64架构未定义符号编译错误求助
解决MaxstSDK编译时的x86_64架构缺失与未定义符号问题
我来帮你搞定这个棘手的编译链接错误——本质原因是你用的MaxstVideoFramework.framework没有包含x86_64架构(这是iOS模拟器运行必需的架构),进而导致链接器找不到_OBJC_CLASS_$_MasCameraDevice这类符号。下面是具体的解决步骤:
1. 先确认SDK支持的架构
第一步先搞清楚这个framework到底包含哪些架构,打开终端,切换到framework所在的目录,执行这条命令:
lipo -info MaxstVideoFramework.framework/MaxstVideoFramework
如果输出里没有x86_64,说明这个SDK确实没提供模拟器架构支持,那你有两个选择:
- 直接联系Maxst官方,索要包含x86_64架构的SDK版本
- 暂时只在真机上运行测试(模拟器没法用这个SDK)
2. 配置项目兼容现有SDK(想在模拟器编译的话)
如果暂时只能用当前SDK,又想在模拟器上编译通过,可以这么操作:
- 打开Xcode项目,选中你的target
- 切换到
Build Phases标签页,找到Link Binary With Libraries,把MaxstVideoFramework.framework的状态改成Optional(不要选Required) - 接着添加一个
Run Script阶段,把下面的脚本粘进去:
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}" # 遍历frameworks目录,移除不兼容的架构切片 find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK do FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable) FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME" echo "处理的可执行文件:$FRAMEWORK_EXECUTABLE_PATH" EXTRACTED_ARCHS=() for ARCH in $ARCHS do echo "提取架构 $ARCH 从 $FRAMEWORK_EXECUTABLE_NAME" lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH" EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH") done echo "合并提取的架构:${ARCHS}" lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}" rm "${EXTRACTED_ARCHS[@]}" echo "替换原可执行文件为合并后的版本" rm "$FRAMEWORK_EXECUTABLE_PATH" mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH" done
这个脚本会根据当前编译的目标架构,自动移除不兼容的切片,避免链接报错。
3. 检查类名拼写是否正确
另外,顺便确认下代码里的类名是不是写错了——错误里的MasCameraDevice会不会是MaxstCameraDevice?有时候SDK类名拼写错误也会导致未定义符号问题,核对一下你的import语句和代码中的类名,确保和SDK文档一致。
4. 重新添加framework试试
如果上面的方法都不行,试试彻底重新添加一遍framework:
- 先把项目里的
MaxstVideoFramework.framework完全删除(包括Link Binary With Libraries和Copy Files阶段的引用) - 重新把framework拖入项目,记得勾选
Copy items if needed,然后在target的General标签页的Frameworks, Libraries, and Embedded Content里,把这个framework的设置改成Embed & Sign
内容的提问来源于stack exchange,提问作者user3336078
相关产品推荐
相关产品推荐

