我遇到了一个问题,我尽力解决它,但我花了很多时间不适合我。
我没有任何想法来解决它。我的项目基于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查看调用)
其他信息:
答案 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