Clang编译iOS (arm64)与-shared LDFLAG - Exec格式错误



新手提醒,如果这个问题重复,请提前道歉(没有在其他地方找到答案)!

我在macOS机器(x86_64)上构建iOS (arm64)的简单hello二进制文件时遇到了问题。

问题是,当我添加LDFLAGS与共享框架(即"-shared -framework CoreMedia"或其他框架)来构建二进制,它运行良好但当设备上执行我Exec format error:

iPhone:/tmp root# ./hello 
-sh: ./hello: cannot execute binary file: Exec format error

没有-shared标志的构建,它按预期运行:

iPhone:/tmp root# ./hello 
Hello

有人能给我解释一下为什么这个标志导致二进制执行错误?它是否与我所构建的不同平台而不是目标设备相关?

我应该在arm64平台上构建以获得-shared标志工作良好吗?

为了以防万一,构建脚本是:
export CLANG_BIN=`xcrun --sdk iphoneos --find clang`
export CLANGXX_BIN=`xcrun --sdk iphoneos --find clang++`
export SDK=`xcrun --sdk iphoneos --show-sdk-path`
export CFLAGS="-fno-builtin -fno-stack-protector -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/ -fno-stack-protector -Wno-builtin-requires-header -fno-stack-check"
#export LDFLAGS="-shared -framework CoreMedia" # <- exec error when this added to compile
export LDFLAGS="-framework CoreMedia" # <- with just this, bin executes fine
export CXX="$CLANGXX_BIN $CFLAGS -isysroot $SDK"
$CXX -arch arm64 -o hello hello.c $LDFLAGS -Wall -Wconversion

-shared表示您正在构建一个共享库。
不能运行共享库。

相关内容

  • 没有找到相关文章

最新更新