首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何创建可在 Apple 自研芯片和基于 Intel Mac 机上运行应用程序

Xcode12 早期版本 Xcode 不包含构建和测试 macOS 代码通用版本所需支持。...更新 Xcode 工程架构列表 Xcode 12 及更高版本会自动将 arm64 架构添加到所有 macOS 二进制文件(包括应用程序和标准架构列表中。...在调试和测试过程中,在默认情况下,Xcode 仅针对当前系统架构构建版本,但是,它会为代码 Release 版本自动构建通用二进制文件。...通用 macOS 应用程序支持 arm64 和 x86_64 体系结构,以下示例显示了如何为这些架构编写条件代码: #if arch(arm64) // Code meant for the arm64...您可以通过更改项目的 Build Active Architecture Only 选项来在任意 Mac 机上创建带有调试符号通用二进制文件。

2.2K30

深入iOS系统底层之程序中汇编代码

我们通过菜单来进行构建程序操作其实内部实现都是借助clang来完成。...你可以在命令终端中键入man clang来查看这个命令所有参数和使用介绍,你还可以在Xcode工程中使用command + 9快捷键就可以看到你每次构建工程详细流程,这里面有对程序使用clang命令进行编译和链接具体实践...因为iOS系统支持多种体系结构,所以可以在汇编代码中使用几个宏来区分代码是x86_64还是arm或者arm64, 就比如下面的代码: //你可以像高级语言一样通过#include引入头文件。...下面就是一个求两个参数和加法函数在x86_64体系结构实现: //x86_64位下函数实现 .text .global _add .align 3 _add: movq %rdi,%rbx...,最好方法是阅读CPU体系结构手册: arm32位参考手册 arm64位参考手册 x86_64位参考手册 9.伪条件语句 汇编语言有相应进行比较和跳转指令,但是我们仍然可以借助伪条件语句来使得我们代码更加具有可读性

1.6K30
您找到你想要的搜索结果了吗?
是的
没有找到

Xcode 常见 CLI 工具

当然这套工具包有些命令不在/usr/bin路径下,我们就需要在命令前加上xcrun了,如swift-demangle,如果我们直接使用swift-demangle就会出现命令找不到错误,使用xcrun...xcodebuild 作用:我们可以使用其对 Xcode 工程进行清理,分析,构建,测试,存档;场景:CI 构建等;路径:/Applications/Xcode.app/Contents/Developer...nm 作用:nm 命令是 linux 下自带特定文件分析工具,一般用来检查分析二进制文件、文件、可执行文件中符号表,返回二进制文件中各段信息,查看二进制目标文件符号,主要就是函数名称以及全局变量...中程序符号表 nm XXX # 查看所有符号,会打印出符号来源哪个地方 nm -nm XXX # 找到未定义符号,也就是外部符号 nm -u XXX 前面我们曾经查看过xcodebuild符号...,通常是那些全局非静态函数; U 该符号未定义过,需要自其他对象文件中链接进来; W 未明确指定弱链接符号;同链接其他对象文件中有它定义就用上,否则就用一个系统特别指定默认值。

3.2K21

连接器工具错误lnk2019_2019年十大语文错误

文章目录 可能原因 1.不编译包含符号定义源文件 2.未链接包含符号定义对象文件或 3.符号声明拼写与符号定义不同 4.使用了函数,但是参数类型或数量与函数定义不匹配 5.已声明但未定义函数或变量...:::no-loc(static):::未定义成员 9.生成依赖项仅在解决方案中定义为项目依赖项 10.未定义入口点 11.使用 Windows 应用程序设置生成控制台应用程序 12.尝试将64位链接到...如果某个符号被引用但从未定义,则链接器将生成一个无法解析 :::no-loc(extern)::: al 符号错误。...12.尝试将64位链接到32位代码,或将32位链接到64代码 链接到代码和对象文件必须编译为与代码相同体系结构。 确保项目引用是针对与项目相同体系结构编译。...请确保 ” /LIBPATH ” 或 “其他目录” 属性指向为正确体系结构生成

4.1K20

Xcode10不再支持libstdc++说起

某个静态如果以前是依赖于libstdc++代码,那么这个静态Xcode10中被链接时将会报符号找不到链接错误信息:Undefined symbols for architecture XXX..._64 可能你会想按理来说libc++代码实现应该只是libstdc++中代码实现升级版本,应该要存在着兼容情况,那为什么还会报符号未定义错误呢?...为什么可以在一个工程中可以同时引入两个定义了相同内容呢?难道不会在编译时报符号冲突或者重名错误吗?...,因此不会产生符号重复和冲突错误!...这也就可以解释当我们把一个依赖libstdc++.dylib静态,引入到Xcode10工程中时会报如下错误: Undefined symbols for architecture x86_64:

2K30

工程化(一)——Xcode工程探究

3,创建Target 一个Xcode工程(project),是可以构建多种产物,具体是构建哪一种产物,就是通过Target来指定配置。...所以Xcode提供Scheme就是可以让开发者更方便、更直观地进行各项构建配置。...如果我们现在想要查看某Xcode工程构建产物符号表信息,那么就需要依次手动执行如下操作: ①打开对应Xcode工程,Product->Show Build Folder In Finder ②在Build...=Debug][sdk=iphonesimulator*][arch=x86_64] = $(inherited) -framework AFNetworking 需要注意是,在Xcode11.4及其之后版本中...因此,在编译构建主工程ShareLife,就会触发Pods_ShareLife Target,进而触发各个第三方以及组件Targe编译构建

2.1K31

iOS符号冲突(duplicate symbols)

_OBJC_CLASS_$_SSUser错误。...错误,此时可以选择将其中一个-force_load;(需要注意两个版本是不是一致) 所以这里直接编译通过原因:工程中已经有了SSUser类符号,所以链接时候会直接使用工程中SSUser...此时终于复现了之前符号冲突: duplicate symbol _OBJC_CLASS_$_SSUser in: /Users/loyinglin/Library/Developer/Xcode...总结 符号冲突是引入第三方时候,有可能会遇到问题。 当A和B符号出现冲突时,如果A和B冲突符号,是功能相同符号,则可以选择去掉其中一个符号,选择只加载其中一个符号。...如果两个符号所表示意义不同,比如说不来自同一个(仅仅是命名一样,导致符号冲突),或者来自同一个但是版本不同,这种只能通过重命名或者修改代码逻辑来实现共存。

4.4K30

iOS开发笔记(七)

正文 这次分享三个有意思问题:二维码生成、Xcode8单元测试问题、添加新字体。 二维码生成 iOS平台上二维码生成有很多第三方,也可以使用原生方法,这里选用是QREncoder。...新建Unit Test时候,这里属性值变成了DWARF,没有附带dSYM符号文件,所以无法断点。...,报.h file not found错误; 如果单元测试引入文件A,文件A引入了第三方C,那么需要在build setting添加对应search framework ?...are only supported on iOS 8.0 and later (@rpath/XCTest.framework/XCTest) for architecture x86_64 以前加载动态时候...Xcode版本是** Version 8.3.1 (8E1000a)** 猜测是Xcode生成XCTest Framework是动态,被Xcodeembedded到项目中。

1.4K90

Swift 入门:编译 Swift 源码(1)

函数式编程模式,例如映射和过滤 使用 try/catch/throw 处理原生错误 编程语言很多特性都是依赖于编译器。...比如,与 C 语言枚举相比,Swift 枚举就依赖编译器实现了关联值等高级特性。 为了方便了解高级特性实现原理,掌握 Swift 及相关源码编译是开发者必须掌握技能。...根据 https://ci.swift.org/ 网站提示: 当前官方推荐使用正常编译环境是: Host OS: 10.15.6 Xcode: 12.2 Beta 3 (12B5035g) 安装依赖包...> 对 Xcode 构建原理熟悉同学,可以定制编译脚本,并将空间占用压缩到 20G 以内 官方版本 编译 llvm 和 Swift cd ~/swift-source/swift utils/build-script...1107/llvm-macosx-x86_64 --target ZERO_CHECK --config RelWithDebInfo \ -- -parallelizeTargets -jobs 12

6.3K10

iOS编译原理

在编译阶段降低了编译要求提高了灵活性,而C++则是提高了编译要求,在编译过程中就发现更多潜在错误,在运行前改正,降低了灵活性; 以下面的代码为例,在编译期间,C++认为是错误,而OC则认为没有问题:...r_brace '}' [StartOfLine] Loc= eof '' Loc= 结果分析: 每个被分割源代码符号都被记录了位置,方便后续定位错误...; 链接器链接多文件时会创建符号表,用于记录所有已经定义和未定义符号; 出现相同符号,会报错:"ld:dumplicate symbols"; 在其他目标文件里没有找到到符号,会报错:"Undefined...但是这些符号都会被记录下来,在运行时再通过dlopen和dlsym动态链接绑定; 动态链接:作用于运行时,这样优势在于:诸多类似UIKit这样共享将不必包含在每一个App包里。...比如:我们使用到UIKit系统,等到点击App真正开始运行之前,才会去链接依赖UIKit,链接完成再运行App;

1.6K20

了解和分析iOS Crash

Debug Symbol文件中(也就是dSYM文件):一般来说,debug模式构建app会把Debug符号表存储在编译好binary信息中,而release模式构建app会把debug符号表存储在...关键信息模块,不论是进程内还是进程外,当遇到一个致命错误(fatal error,例如bad code signature,缺失依赖,不恰当访问私有敏感信息等)。...底层(例如libdispatch)会在遇到fatal错误时候陷入这个困局。关于错误相关信息会在crash report章节或者是设备打印信息里找到。...[EXC_BAD_INSTRUCTION // SIGILL] 当尝试去执行一个非法或者未定义指令时会触发该异常。...额外诊断信息 本章节包含终止相关额外诊断信息,包括: · 应用具体信息:在进程被终止前捕捉到框架错误信息 · 内核信息:关于代码签名问题细节 · Dyld (动态链接错误信息:被动态链接器提交错误信息

1.4K30

了解和分析iOS Crash Report

Debug Symbol文件中(也就是dSYM文件):一般来说,debug模式构建app会把Debug符号表存储在编译好binary信息中,而release模式构建app会把debug符号表存储在...关键信息模块,不论是进程内还是进程外,当遇到一个致命错误(fatal error,例如bad code signature,缺失依赖,不恰当访问私有敏感信息等)。...底层(例如libdispatch)会在遇到fatal错误时候陷入这个困局。关于错误相关信息会在crash report章节或者是设备打印信息里找到。...[EXC_BAD_INSTRUCTION // SIGILL] 当尝试去执行一个非法或者未定义指令时会触发该异常。...额外诊断信息 本章节包含终止相关额外诊断信息,包括: 应用具体信息:在进程被终止前捕捉到框架错误信息 内核信息:关于代码签名问题细节 Dyld (动态链接错误信息:被动态链接器提交错误信息

1.6K20

了解和分析iOS Crash

Debug Symbol文件中(也就是dSYM文件):一般来说,debug模式构建app会把Debug符号表存储在编译好binary信息中,而release模式构建app会把debug符号表存储在...关键信息模块,不论是进程内还是进程外,当遇到一个致命错误(fatal error,例如bad code signature,缺失依赖,不恰当访问私有敏感信息等)。...底层(例如libdispatch)会在遇到fatal错误时候陷入这个困局。关于错误相关信息会在crash report章节或者是设备打印信息里找到。...当尝试去执行一个非法或者未定义指令时会触发该异常。...额外诊断信息 本章节包含终止相关额外诊断信息,包括: · 应用具体信息:在进程被终止前捕捉到框架错误信息 · 内核信息:关于代码签名问题细节 · Dyld (动态链接错误信息:被动态链接器提交错误信息

1.7K20

深入iOS系统底层之静态介绍

这是一个变长结构体,结构体定义如下: struct symtab_header { char identifier[16]; //符号标识 char timestamp[12...我们知道在程序链接时需要读取目标文件中符号表信息才能决定其他目标文件中引用符号信息是否真实存在,当其他目标文件引用符号信息不存在或者找不到时就会报经典符号信息不存在错误: Undefined...我们可以通过XCODE工程来生成一个静态文件,我们还可以通过lipo命令来构造一个多体系结构静态。(其实了解了静态文件结构后我们就很容易自己编写出一个lipo命令出来了!)...对于静态文件通常情况下我们可以借助lipo命令在构建体系结构静态,还可以通过ar命令来构建和显示一个静态文件,以及提取这些文件,或则将某个目标文件从静态中删除,以及将某个目标文件添加到静态中...至于为什么要对静态目标文件修改原因是XCODE对源代码编译和链接是一体我们无法在编译之后和链接之前插入脚本来修改目标文件中内容。但是静态内容则是我们可以任意预先去修改

1.2K52

xmake v2.5.7 发布,包依赖锁定和 ValaMetal 语言编译支持

xmake 是一个基于 Lua 轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门...如果,我们项目没有使用默认 metal library,我们也可以通过上面提到 utils.bin2c 规则,作为源文件方式内嵌到代码中,例如: add_rules("utils.bin2c"...add_repositories("myrepo repodir", {rootdir = os.scriptdir()}) os.cp 支持符号链接 之前版本,os.cp 接口不能很好处理符号链接复制...,他会自动展开链接,复制实际文件内容,只会导致复制后,符号链接丢失。...: 改进安装和 os.cp 支持符号链接 Bugs 修复 #1531: 修复 targets 加载失败错误信息提示错误

59010

现今 Swift 包中二进制目标

这些被扩展(或增大)可执行文件,是包含了为多个不同架构原生构建切片。这允许所有者分发一个运行在所有预期目标架构上单独二进制。...当源码不能被暴露或当处理非常庞大代码仓库时,预编译成为可执行文件非常有意义,因为预编译源码以及以二进制文件分发他们,将节省构建程序在他们应用上构建时间。...Xcode 基于期望目标架构决定使用哪一个。...开发者工具如, SwiftLint[11] 或 SwiftGen[12] 正是这种案例。在这种情况下,可以使用包含可执行文件(本地或远程) .zip 文件路径创建新二进制目标。...如果您不熟悉 目标三元组[18],它们是一种选择构建二进制文件架构方法。请注意,这不是 主机(构建可执行文件机器)体系结构,而是 目标 机器(应该运行所述可执行文件机器)。

1.8K20

mac 编译问题解决——building for macOS-x86_64 but attempting to link with file built for xxx

在Mac下,有两套编译工具链,GNU和Apple(通过Xcode安装),GNU以gcc为代表,而Apple则以clang为代表,在这两个核心编译工具周围,又有很多别的小编译工具。...如果是Appleranlib工具的话,ranlib --version输出应该是下面这样: $ranlib --version error: /Applications/Xcode.app/Contents...根据ChatGPT, ranlib功能如下: ranlib是一个命令行工具,用于在静态中创建索引(也称为符号表)。索引提供静态中所有符号(函数、变量等)列表。...它帮助编译器和链接器在链接时更快地查找和解析符号。当一个程序需要链接静态时,链接器会使用ranlib创建索引来确定静态中包含符号,以便正确地链接程序。...可以看到,ranlib对于编译静态来说,是必不可少(与ar -s完全等效)。

48020
领券