Macos 为什么我使用x86_64构建系统构建的本机arm64应用程序无法进行代码签名,除非我删除以前的可执行文件?
我有一个简单的C应用程序:Macos 为什么我使用x86_64构建系统构建的本机arm64应用程序无法进行代码签名,除非我删除以前的可执行文件?,macos,native,apple-silicon,Macos,Native,Apple Silicon,我有一个简单的C应用程序: #包括 int main(){ printf(“你好,世界!\n”); } 当我: 在苹果的硅设备上构建 瞄准arm64 使用为x86_64编译的生成系统 替换现有二进制文件(例如在重建期间) 根据shell,最终二进制文件无法执行,并报告为“已终止”: %rm你好 #arch模拟仍为x86_64编译的构建系统 %arch-x86_64 cc-arch-arm64 hello.c-o hello %/你好 你好,世界! %arch-x86_64 cc-arch-ar
#包括
int main(){
printf(“你好,世界!\n”);
}
当我:
%rm你好
#arch模拟仍为x86_64编译的构建系统
%arch-x86_64 cc-arch-arm64 hello.c-o hello
%/你好
你好,世界!
%arch-x86_64 cc-arch-arm64 hello.c-o hello
%/你好
zsh:死了。/你好
如果我的构建系统是本机arm64(或arm64e),则没有问题:
%rm你好
%arch-arm64e cc-arch-arm64你好.c-o你好
%/你好
你好,世界!
%arch-arm64e cc-arch-arm64你好.c-o你好
%/你好
你好,世界!
如果我输入并替换代码签名,则它可以工作:
%cp你好,你好
%协同设计-s--f hello2
hello2:替换现有签名
%/你好
你好,世界!
原稿复制步骤及调试 当我以arm64为目标在Apple Silicon设备上构建时,但使用为x86_64编译的构建系统,最终的二进制文件无法执行,并根据shell报告为“已终止”:
#arch模拟仍为x86_64编译的构建系统
%arch-x86_64 cc-arch-arm64 hello.c-o hello
%档案你好
你好:Mach-O 64位可执行arm64
%/你好
zsh:死了。/你好
即使尝试调试它也会失败:
%lldb你好
(lldb)目标创建“你好”
杀了lldb喂
作为一种解决方法,我可以在调用cc
之前将其“重置”回arm64环境,但这很不雅观,而且感觉我缺少了一些配置,以避免跳过这么多障碍
%cc--版本
Apple clang版本12.0.0(clang-1200.0.32.27)
目标:arm64-apple-darwin20.1.0
线程模型:posix
InstalledDir:/Applications/Xcode.app/Contents/Developer/Toolchains/xcodefault.xctoolchain/usr/bin
这是在macOS Big Sur 11.0.1上
从x86_64交叉编译
如果我从x86_64机器交叉编译并在周围scp二进制文件,则文件执行良好:
%SDKROOT=$(xcrun-sdkmacosx11.0——显示sdk路径)\
MACOSX_部署_目标=$(xcrun-sdk macosx11.0--显示sdk平台版本)\
cc-Arch64你好,c-o你好
%scp hello silicon:/tmp/hello cross
转辙机
%file/tmp/hello cross
/tmp/hello cross:Mach-O 64位可执行文件arm64
%/tmp/hello cross
你好,世界!
跟踪子进程
将--verbose
添加到cc
调用会打印出子进程(我添加了新行以突出显示其他调试中的那些进程):
%arch-x86\u 64 cc--verbose-arch-arm64 hello.c-o hello
Apple clang版本12.0.0(clang-1200.0.32.27)
目标:AARC64-apple-darwin20.1.0
线程模型:posix
InstalledDir:/Applications/Xcode.app/Contents/Developer/Toolchains/xcodefault.xctoolchain/usr/bin
“/Applications/Xcode.app/Contents/Developer/toolschains/xcodefault.xctoolschain/usr/bin/clang”-cc1-triple arm64-apple-macosx11.0.0-Wdeprecated objc isa用法-Werror=不推荐的objc isa用法-Werror=隐式函数声明-emit obj-mrelax all-disable free-disable llvm验证器-discard value names-主文件名hello.c-mrelocation model pic-pic level 2-mthread model posix-mframe pointer=非叶-fno严格返回-masm详细-munwind表格-目标sdk版本=11.0-目标cpu漩涡-目标功能+v8.3a-目标功能+fp-armv8-目标功能+neon-目标功能+crc-目标功能+crypto-目标功能+fullfp16-目标功能+ras-目标功能+lse-目标功能+rdm-目标功能+rcpc-目标功能+zcm-目标功能+zcz-目标功能+sha2-目标功能+aes-目标abi darwinpcs-休洛半参数和返回-矮人列信息-调试器调优=lldb-目标链接器版本609.6-v-资源目录/Applications/Xcode.app/Contents/Developer/toolschains/XcodeDefault.xToolchain/usr/lib/clang/12.0.0-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk-I/usr/local/include-internal isystem/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/local/include-internal isystem/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/12.0.0/include-内部外部isystem/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include-内部外部isystem/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include-Wno reorder init list-Wno implicit int float conversion-Wno-c99-designator-Wno final dtor non final class-Wno extra semi stmt-Wno误导性缩进-Wno quoted include in framework header-Wno隐式fallthrough-Wno enum-conversion-Wno枚举浮点转换-fdebug编译dir/tmp/example-ferror limit 19-fmessage length 237-stack protector 1-fstack check-mdarwin stkchk strong link-fblock-fencode扩展块签名-fregister全局dtor with atexit-fgnuc version=4.2.1-fobjc runtime=macosx-11.0.0-fmax type align=16-fdiagnostics show选项-fcolor diagnostics-o/var/folders/j2/g4_hr3jd2sz415vrf7b1d6300000gp/T/hello-232f6b.o-x c hello.c
clang-cc1版本12.0.0(clang-1200.0.32.27)默认目标x86_64-apple-darwin20.1.0
忽略不存在的目录“/usr/local/include”
忽略不存在的目录“/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/local/include”
忽略不存在的目录“/Applications/Xcode.app/Contents/De