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

xmake v2.3.4 发布, 更加完善工具链支持

项目源码 官方文档 新特性介绍 工具链改进 工具链和平台完全分离 之前版本,平台和工具链绑定过于紧密,例如xmake f -p windows 平台,默认只能使用msvc编译,想要切到clang...我们可以通过下面的命令查看: $ xmake show -l toolchains xcode Xcode IDE vs VisualStudio IDE yasm...比如,我们要从默认gcc切换到clang编译,可能需要切一些工具集,xmake f --cc=clang --cxx=clang --ld=clang++ --sh=clang++,因为编译切了,对应链接...其中set_toolset用于挨个设置不同工具集,比如编译链接、汇编等。...这也是推荐做法,因为像gcc/clang等大部分编译工具链,编译链接都是配套使用,要切就得整体切,单独零散切换设置会很繁琐。

1.4K20

Ruby 与 clang

笔者在使用 `rbenv`[1] 安装 ruby 时,遇到一个头文件缺失导致无法编译失败问题。 本文会记录笔者对该问题产生原因分析,并通过分析 clang 源码方式提供一个通用解决方案。...* [apps/app_rand.o] Error 1 make: *** [all] Error 2 从上面的日志中,我们可以发现三个关键点: rbenv 最终调用clang 执行编译任务...-apple-ios8.0 main.m -v 各个 tool 参数: clang -cc1 -triple arm64-apple-ios8.0.0 -o main-a28fc8.o -x objective-c...通过查看 clang::driver::toolchains::Darwin 相关代码,我们会发现下面的执行逻辑: Compilation 调用 clang::driver::toolchains::.../ 编译 macosx 项目 xcrun -l clang main.m 优化方案:xcrun 根据上面的信息,我们可以尝试使用 xcrun 调用安装命令: ?

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

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

clang命令简单介绍 通过上述第三种方式查看生成汇编代码方式其实是通过clang命令完成。...clang是一个C/C++/Objective-C语言编译,它包含了预处理、语法分析、优化、代码生成、汇编装配、链接等功能。...你可以在命令终端中键入man clang查看这个命令所有参数和使用介绍,你还可以在Xcode工程中使用command + 9快捷键就可以看到你每次构建工程详细流程,这里面有对程序使用clang命令进行编译和链接具体实践...程序编译链接命令流程图 可以看出无论是源代码编译还是程序链接都是用clang命令来实现,不要被命令中大量编译链接选项所吓倒,其实这些参数都是我们在可视化工程Build Settings里面设置...而-o 后面的输出文件就是对应汇编代码文件,一般这个输出文件以.s扩展名。这里要注意同时使用-arch参数指定输出体系架构

1.6K30

iOS逆向之Mach-O文件

如下,TRIP是笔者构建一个iOS可执行文件,使用MacOS系统自带file命令可以查看其文件类型。...所有的这些加载命令由系统内核加载直接使用,或由动态链接处理。...还是以main.c例,我们把main.c编译链接可执行文件,命令如下:$ clang -o main.out main.c // .c源文件编译链接成可执行文件上面命令会在目录下生成一个名为main.out...Xcode查看Mach-O类型对于一个XCode项目,我们可以在Target/Build Settings/Mach-O Type中查看当前项目的类型。...因为需要储存多种架构代码,通用二进制文件通常比单一平台二进制程序要大。由于两种架构有共同一些资源,所以并不会达到单一版本两倍之多。由于执行过程中,只调用一部分代码,运行起来也不需要额外内存。

10.2K10

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

_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[3]: *** [libtvm_runtime.dylib...在Mac下,有两套编译工具链,GNU和Apple(通过Xcode安装),GNU以gcc代表,而Apple则以clang代表,在这两个核心编译工具周围,又有很多别的小编译工具。...根据ChatGPT, ranlib功能如下: ranlib是一个命令行工具,用于在静态库中创建索引(也称为符号表)。索引提供静态库中所有符号(函数、变量等)列表。...它帮助编译链接链接时更快地查找和解析符号。当一个程序需要链接静态库时,链接使用ranlib创建索引来确定静态库中包含符号,以便正确地链接程序。...在这里我选择执行第二种,具体命令: $ brew uninstall binutils 然后再检查ranlib --version 命令输出,确认是Apple工具链后再make clean,重新编译即可

40820

深入剖析 iOS 编译 Clang LLVM

LLVM 核心库提供一个优化,对流行 CPU 做代码生成支持。lld 是 Clang / LLVM 内置链接clang 必须调用链接来产生可执行文件。...查看occ实现可以使用如下命令 clang -rewrite-objc main.m 查看操作内部命令,可以使用 -### 命令 clang -### main.m -o main 想看清clang...clang 静态分析是通过建立分析引擎和 checkers 所组成架构,这部分功能可以通过 clang —analyze 命令方式调用。...有些寄存 class 只限制在模型指令操作,这样就需要设置0 bit isAllocatable = 1; //列出可选分配命令。默认命令是 memberlist 自己。...用先前 Mach-O 章节例子继续分析,每个函数,全局变量和类都是通过符号形式来定义和使用,当把目标文件链接成一个执行文件时,链接在目标文件和动态库之间对符号做解析处理。

7.5K20

Xcode 常见 CLI 工具

xcrun(Xcode Command Line Tool Runner) 是 Xcode 基本命令行工具,使用它来调用其他 CLI 工具,这时候你应该就知道为啥需要它来调用其他 CLI 工具了。...-l 0x0000000100298000 0x000000010029e694 -i 构建相关 xcodebuild 作用:我们可以使用其对 Xcode 工程进行清理,分析,构建,测试,存档;场景...其中man命令就是用来查看指定命令使用手册。.../usr/bin/clang; sourcekit-lsp LSP(Language-Server-Protocol)开源语言服务协定。...,其中全部类型包括: A 该符号值在今后链接中将不再改变; B 该符号放在 BSS 段中,通常是那些未初始化全局变量; D 该符号放在普通数据段中,通常是那些已经初始化全局变量; T 该符号放在代码段中

3.2K21

xmake从入门到精通9:交叉编译详解

xmake是一个基于Lua轻量级现代化c/c++项目构建工具,主要特点是:语法简单易上手,提供更加可读项目维护,实现跨平台行为一致构建体验。...里面的gcc/g++就是c/c++编译,通常也可以作为链接使用链接时候内部会去调用ld来链接,并且自动追加一些c++库。...cpp是预处理,as是汇编,ar用于生成静态库,strip用于裁剪掉一些符号信息,使得目标程序会更加小。nm用于查看导出符号列表。...这里我们追加了-v参数,看了下详细编译命令和检测到mingw工具链配置值,其中cross被自动检测x86_64-w64-mingw32-,bin目录也被自动检测到了,还有编译链接也是。...++") 强制test目标的编译链接使用clang编译,或者指定交叉编译工具链中编译名或者路径。

1.6K30

iOS编译原理

:新增一门语言只需要修改前端,而新增一种CPU架构只需要修改后端即可; 2.LLVM与Clang LLVM是苹果当前使用编译: LLVM是一套编译基础设施项目自由软件,以C++写成,包含一系列模块化编译组件和工具链...使用file命令查看目标文件类型: % file main.o main.o: Mach-O 64-bit object x86_64 可以看到,汇编生成Mach-O格式文件,而且是object...; 八、链接(Linking) 主要功能:符号解析、重定位、合并目标文件,最终生成可执行文件; 1.使用xcrun命令执行链接,得到可执行文件 xcrun clang main.o -o main 2....使用file命令查看文件类型 % file main main: Mach-O 64-bit executable x86_64 % ....Mach-O格式可执行文件; 通常项目都会包含多个文件,不同文件之间变量和接口函数就会产生相互依赖关系; 程序运行前,需要使用链接将多个文件里符号和地址绑定起来,才能保证整个程序里变量、接口正常调用

1.5K20

如何持续自我提升

下面截取部分原文: “1.2 Module 化 1.2.1 基本概念 module:是一个编译单元,或构建产物,对一个软件库结构化替代封装,供链接使用(更多介绍请查阅 Clang-Module:https...每一次思考都需要我们把记忆能力充分调用: 回忆与 module 相关知识 回忆搜索引擎技巧 回忆如何通过 Xcode 创建工程、动态库 回忆 APP 构建每一步命令 ......image-15402758 Demo 工程会有一个名为 Host APP,同时该 App 会依赖名为 FrameW 动态库和其它系统库。 项目的整体架构如下图: ?...构建 通过 xcodebuild 命令,可以对 Host 进行构建。 如下,红框部分是 Xcode 执行 链接 Host 时,所调用命令: ?...但是,我们得到了一个新知识 clang调用 ld 命令执行链接任务。 调试链接过程 接着,我们再次尝试对 ld 命令添加参数 -v -t 方式进行调试。

69030

Xmake v2.8.7 发布,新增 cosmocc 工具链支持,一次编译到处运行

使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多精力集中在实际项目开发上。...如果一些测试程序长时间运行不退出,就会卡住,我们可以通过配置超时时间,强制退出,并返回失败。...|armeabi-v7a@linux|x86_64` 而在 2.8.7 中,我们改进了模式匹配支持,新增排除指定平台和架构,例如: !...linux android|armeabi-v7a,!iphoneos@macosx,!linux|x86_64 !android|armeabi-v7a@!linux|!x86_64 !...上面的配置,如果在 macOS x86_64 设备上,它仅仅只会匹配 xmake f -a x86_64 本地架构编译。 如果是 xmake f -a arm64 交叉编译,就不会被匹配到。

10110

Xcode中和symbols有关几个设置

为了构造可执行文件,链接必须完成两个主要任务: 符号解析(symbol resolution)。目标文件定义和引用符号符号解析目的是将每个符号引用刚好和一个符号定义联系起来。...编译和汇编生成从地址0开始代码和数据节。链接通过把每个符号定义与一个存储位置联系起来,然后修改所有对这些符号引用,使得它们指向这个存储位置,从而重定位这些节。...Objective-C不会为方法定义链接符号,只会为类定义链接符号。 可以在终端中用nm命令查看一个可重定位文件或可执行文件符号表,其中加上-a参数可以显示包括调试符号在内所有符号。...在Xcode查看构建过程,可以发现,当Generate Debug Symbols选项设置YES时,每个源文件在编译成.o文件时,编译参数多了-g和-gmodules两项。...这时构建失败。想想符号在重定位时作用,如果构建静态库真的能剥离所有符号,那么它也就没法被链接了。

1.5K30

llvm 编译高级用法:第三方库插桩

原文结尾提到该方案无法覆盖100%符号: 基于静态扫描+运行时trace方案仍然存在少量瓶颈: initialize hook不到 部分block hook不到 C++通过寄存间接函数调用静态扫描不出来...PC 最近符号名称 printf("guard:%p 开始执行:%s \n", PC, info.dli_sname); } 更多内容,可以阅读参考资料相关链接 dladdr[2] _...以下面的代码例: void foo(int *a) { if (a) *a = 0; } 通过编译代码转为汇编时,它会被拆成3个部分: ?...1、准备源码文件 命令行输入: cat main.m int main() { return 0; } EOF 2、打印构建顺序 命令行输入: xcrun clang main.m...llvm 编译 通过 SanitizerCoverage 支持以上三种级别的代码覆盖率插桩。 通过导出第三方库 bitcode,我们可以实现任意cpu架构插桩。

3.5K21

xmake v2.6.5 发布,远程编译支持

使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多精力集中在实际项目开发上。...查看服务日志 $ xmake service --logs 清理远程服务缓存和构建文件 我们也可以手动清理远程任何缓存和构建生成文件。...如果我们是在用 Xmake 开发 C/C++ 项目,但是需要引入一些 Rust 子模块给 C/C++ 项目使用,那么就可以借助这种方式,快速方便地在 C/C++ 中调用 Rust 库和代码。...更多关于 C/C++ 中调用 Rust 代码说明,见:使用 cxxbridge 在 C/C++ 中调用 Rust 支持源文件分组 新版本,我们提供了一个新接口 add_filegroups,用于对...$ xmake f -p iphoneos [-a armv7|armv7s|arm64|i386|x86_64] $ xmake 但是由于 M1 设备上模拟也支持 arm64 架构,因此之前单纯从

37940

APP生成与运行(一)

我们将一组二进制代码合并成一个指令或符号,创造了汇编语言,汇编语言以一种相对好理解方式来编写,然后通过汇编过程生成 CPU 可以运行二进制代码并运行在 CPU 上。...Clang本身性能优异,其生成AST所耗用掉内存仅仅是GCC20%左右,测试证明Clang编译Objective-C代码时速度GCC3倍,还能针对用户发生编译错误准确地给出建议。...5: assembler, {4}, object//生成机器码 6: linker, {0, 5}, image//链接 7: bind-arch, "x86_64", {6}, image//生成...编译优化 LVVM优化会进行BitCode生成,链接期优化等等 编译后端 LLVM机器码生成器会针对不同架构,比如arm64等生成不同机器码 四、Xcode执行Build流程 dSYM...五、提高项目Build速度 查看编译时间 我们需要一个途径,能够看到编译时间,这样才能有个对比,知道我们优化究竟有没有效果。

1.1K10

使用xmake构建c++20 modules

相关介绍我就不多说了,这边主要还是介绍下xmake下如何去构建c++modules项目,我们先来看一个简单例子: target("hello") set_kind("binary")...模块接口文件 上文所述*.mpp是xmake推荐模块接口文件命名,其实各家编译对于模块文件默认后缀名都是不统一clang下是*.cppm,而msvc下是*.ixx,这对于编写跨编译统一模块项目是非常不友好..., 因此这里参考了build2里面的推荐方式,采用统一*.mpp后缀,来规范xmake下模块项目接口命令。...编译参数处理 clang 我们先来看下clang下,是如何处理modules构建,我们只需要加上-v来执行xmake构建,就能看到所有的细节参数: ruki:hello ruki$ xmake -v...master,如果要使用,还得单独为此checkout cxx-modules分支代码来编译一份支持c++modulesgcc toolchains才行。

1.7K40

iOS底层原理之LLVM & Clang

1.3.1: iOS编译架构 Objective-C/C/C++使用编译前端是Clang,Swift是Swift,后端都是LLVM。 二: Clang Clang是LLVM项目一个子项目。...通过下面命令,可以看到执行预处理指令后代码: // 直接在终端查看 clang -E main.m // 生成mian1.m文件查看 clang -E main.m >> main1.m 2:...命令如下: clang main.o -o main 查看链接之后符号: 可以看到输出结果中依然显示找不到外部符号_printf,但是后面多了(from libSystem),指明了_printf所在库是...其他懒绑定符号,比如此处_printf,在首次使用时候通过dyld_stub_binder来将真实函数地址与符号进行绑定,调用时候就可以通过符号找到对应库里面的函数地址进行调用了。...外部函数绑定图解: 链接和绑定区别: 链接,编译时,标记符号在哪个库,只是做了一个标记。 绑定,运行时,将外部函数地址与Mach-O中符号进行绑定。 使用如下命令执行Mach-O文件: .

1.4K10

clang 源码导读(1): clang 入门

在不同场景下,clang 可能具有不同含义: clang driver:编译驱动程序,负责根据简单参数生成更加负杂参数 编译前端(在 clang 库实现):专指编译生成中间代码过程(preprocessor...和 compiler) 实际编译(在 clang -cc1 中实现):clang -cc1 通过 LLVM 库和其它工具实现了编译前端、后端、汇编等工作 以下面的原始命令例: xcrun --sdk...iphoneos clang -arch arm64 main.m -v clang 先会以 clang driver 模式运行,随后组装 clang -cc1 和 ld 两个命令行,并进行下一步处理...以 aarch64-apple-ios11.1 例,我们可以通过该字符串得到以下信息 cpu 架构是 arm64 cpu 子架构是 armv8 厂家是 Apple 编译任务产出目标系统是 iOS 产出对象文件格式是...拼写 clang 命令时,需要注意不同参数优先级,比如,-arch 对架构优先级高于 -target下面的示例显示最后产出文件不包含 -target x86_64 架构 ?

4.7K20
领券