使用 -shared LDFLAG 为 iOS (arm64) 编译的 Clang - 执行格式错误
Clang compiling for iOS (arm64) with -shared LDFLAG - Exec format error
这里是新手警告,如果这个问题重复(在其他地方找不到答案),请提前道歉!
我 运行 遇到在 macOS 机器 (x86_64) 上构建 iOS (arm64) 的简单 hello 二进制文件的问题。
问题是,当我使用共享框架(即“-shared -framework CoreMedia”或其他框架)添加 LDFLAGS 来构建我的二进制文件时,它编译得很好,但是当它在设备上执行时,我得到 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
表示您正在构建共享库。
您不能 运行 共享库。
这里是新手警告,如果这个问题重复(在其他地方找不到答案),请提前道歉!
我 运行 遇到在 macOS 机器 (x86_64) 上构建 iOS (arm64) 的简单 hello 二进制文件的问题。
问题是,当我使用共享框架(即“-shared -framework CoreMedia”或其他框架)添加 LDFLAGS 来构建我的二进制文件时,它编译得很好,但是当它在设备上执行时,我得到 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
表示您正在构建共享库。
您不能 运行 共享库。