带有" _cblas_sgemm"的架构arm64的未定义符号,引自:

时间:2017-11-27 06:25:48

标签: ios linker-errors

我遇到了一个问题,我尽力解决它,但我花了很多时间不适合我。

我没有任何想法来解决它。我的项目基于Xcode 9.1, libnama.a 库在我的项目的第三方,名为 Faceunity ,.a库添加了我的项目,我添加的其他链接标记 $(继承)

架构设置 armv7 armv7s arm64 x86_64 ,使用其他人的方法总是不行!!!!我希望如果有任何想法可能要解决,请告诉我,谢谢!

错误:

  

架构arm64的未定义符号:" _cblas_sgemm",引用   从:         libnama.a中的_cnn_run(cnn-arm64.o)ld:找不到架构arm64 clang的符号:错误:链接器命令失败并带有退出代码   1(使用-v查看调用)

其他信息:

enter image description here

2 个答案:

答案 0 :(得分:0)

当我们在应用程序中集成第三方库时,这是一个典型错误。 据说所需的库没有为arm64架构构建。

链接器无法在指定的静态库中找到arm64的符号。要检查支持的静态库架构,请使用 lipo 文件

  

lipo -info libGoogleAnalytics.a。
  胖文件中的体系结构:libGoogleAnalytics.a是:armv7 i386 x86_64 arm64

答案 1 :(得分:0)

这是因为某些第三方库包含支持模拟器。但在构建应用程序时,您必须排除对模拟器的体系结构支持的支持

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