架构为x86_64的未定义符号:"_OBJC_CLASS_$_UIPointerShape","_OBJC_CLASS_$_UIPointerStyle"

3

Undefined symbols for architecture x86_64: "OBJC_CLASS$_UIPointerShape",引用自: 在 GoogleMaps 中的 objc-class-ref "OBJC_CLASS$_UIPointerStyle",引用自: 在 GoogleMaps 中的 objc-class-ref ld:无法找到符号(s)适用于架构 x86_64 clang:链接器命令失败,退出码为 1(使用-v查看调用)

enter image description here

  • 我已经在 Xcode 的 General Setting 中检查了框架和库的链接,链接正确。
  • 我已经使用了标准体系结构 $ (ARCHS_STANDARD)。
  • 我已经在 build phases 中链接了二进制文件和库。
  • 我正在使用 XCODE 11 和模拟器运行 iOS 13.2。

感谢任何帮助!

3个回答

1

升级版本是谷歌地图的问题。请使用较低版本的谷歌地图。

pod 'GoogleMaps','〜> 3.9.0' 或

pod 'GoogleMaps','2.5.0'


请说明由于iOS 13.4+对新版谷歌地图的要求,需要进行降级。 - Fabian
1
对于那些无法更新Xcode或macOS的人来说,这个答案是解决方案。谢谢! - cbrecabarren

1
这个问题涉及第三方库文件的构建,其中排除了x86_64架构。使用命令file来检查它,例如:
file /usr/lib/libc++abi.dylib
/usr/lib/libc++abi.dylib: Mach-O universal binary with 2 architectures: [i386:Mach-O dynamically linked shared library i386] [x86_64:Mach-O 64-bit dynamically linked shared library x86_64]
/usr/lib/libc++abi.dylib (for architecture i386):   Mach-O dynamically linked shared library i386
/usr/lib/libc++abi.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64

谢谢 @RyanYan,我已经检查过了,现在我知道我所面临的实际问题是什么了。 - SudhakarH

0

有很多方法可以消除这个错误!

  1. 手动方法: 在项目目标的运行脚本中添加以下代码,这将从构建过程中删除模拟器架构(x86_64和i386),从而使你的应用程序得到解决:

Shell:

    /bin/sh

代码:

    APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

    # This script loops through the frameworks embedded in the application and
    # removes unused architectures.
    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 "Executable is $FRAMEWORK_EXECUTABLE_PATH"

    EXTRACTED_ARCHS=()

    for ARCH in $ARCHS
    do
    echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
    lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
    EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
    done

    echo "Merging extracted architectures: ${ARCHS}"
    lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
    rm "${EXTRACTED_ARCHS[@]}"

    echo "Replacing original executable with thinned version"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"

    done

2. 在将应用程序部署到Testflight/App-store之前执行此操作。

从终端进入项目的ProjectFramework.framework文件夹。运行以下命令:

    lipo -remove i386 ProjectFramework_SDK -o ProjectFramework_SDK 
    lipo -remove x86_64 ProjectFramework_SDK -o ProjectFramework_SDK

这样做无法在模拟器上运行。

从框架中检查架构? $ lipo -info PathToProject/ProjectName.framework/ProjectName 并且您还可以使用以下命令进行检查

    file /usr/lib/libc++abi.dylib
    /usr/lib/libc++abi.dylib: Mach-O universal binary with 2 architectures: [i386:Mach-O dynamically linked shared library i386] [x86_64:Mach-O 64-bit dynamically linked shared library x86_64]
    /usr/lib/libc++abi.dylib (for architecture i386):   Mach-O dynamically linked shared library i386
    /usr/lib/libc++abi.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64

参考文档:http://ikennd.ac/blog/2015/02/stripping-unwanted-architectures-from-dynamic-libraries-in-xcode/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接