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

在macOS Catalina上用gcc和-m32标志编译C

在macOS Catalina上使用gcc和-m32标志编译C代码时,需要注意以下几点:

  1. macOS Catalina默认使用LLVM作为编译器,而不是gcc。因此,需要先安装gcc,可以通过Homebrew进行安装。安装命令如下:
  2. macOS Catalina默认使用LLVM作为编译器,而不是gcc。因此,需要先安装gcc,可以通过Homebrew进行安装。安装命令如下:
  3. -m32标志用于指定编译为32位的目标代码。在macOS Catalina上,默认情况下不支持32位应用程序,因此需要进行一些额外的配置。首先,需要在终端中执行以下命令,打开编辑器:
  4. -m32标志用于指定编译为32位的目标代码。在macOS Catalina上,默认情况下不支持32位应用程序,因此需要进行一些额外的配置。首先,需要在终端中执行以下命令,打开编辑器:
  5. 在打开的文件中,找到以下行:
  6. 在打开的文件中,找到以下行:
  7. 将其修改为:
  8. 将其修改为:
  9. 保存并退出编辑器。然后,执行以下命令,重新安装32位支持:
  10. 保存并退出编辑器。然后,执行以下命令,重新安装32位支持:
  11. 编译C代码时,使用以下命令:
  12. 编译C代码时,使用以下命令:
  13. 其中,output_file是生成的可执行文件的名称,input_file.c是要编译的C源文件的名称。
  14. 关于gcc的更多信息和用法,可以参考腾讯云的GCC产品介绍页面: GCC产品介绍

需要注意的是,以上答案仅适用于macOS Catalina上使用gcc和-m32标志编译C代码的情况。对于其他操作系统和编译器,可能会有不同的配置和命令。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

macOS编译调试OpenJDK

VS cod 中配置C++ 开发环境可以参考这篇文档 Using Clang in Visual Studio Code。...使用 VS code 打开 OpenJDK的源代码,恰当的位置设置好断点,点击右上角三角运行图标,选择“Debug C/C++ file”: 然后弹出列表中选择“(lldb) Launch“: 第一次运行会弹出错误信息...点击右下角的 “add configuration…“,弹出的列表中选择 “C/C++: (lldb) Launch” VS code会自动添加缺省的配置,我们需要修改的是 program args...可以断点处停止,但是不能定位源代码,报错如下: Could not load source 'make/src/java.base/unix/native/libnio/ch/Net.c': 'SourceRequest...为了正确的找到源代码,需要在launch.json中配置 sourceFileMap,将源代码的编译时路径映射到本地源代码位置。

32911

吴章金: 如何创建一个*可执行*的共享库

,是联合行动的,两者差异明显: 可执行文件有标准的 C 语言程序执行入口 main,而共享库则并没有这类强制要求 后者为了确保可以灵活被多个可执行文件共享,所以,符号地址链接时是相对的,在装载时动态分配计算符号地址...return 0; } 先来编译为可执行文件(-m32 用来生成采用 i386 指令集的代码): $ gcc -m32 -o hello hello.c $ file hello hello:.../hello hello 再来编译为共享目标文件,并尝试直接执行它: $ gcc -m32 -shared -fpic -o libhello.so hello.c $ file libhello.so.../libhello.so Segmentation fault 加上 -g 编译 gdb 来看看原因: $ gcc -m32 -g -shared -fpic -o libhello.so hello.c...\n"); } 当普通共享库使用,默认编译即可,要能够执行的话,实现一下 entry(),编译时打开 EXEC_SHARED 即可: $ gcc -m32 -shared -fpic -o libhello.so

1.1K20

【最新最全】为 iOS Android 的真机模拟器编译 Luajit 库

编译 Luajit 库,的确是一个挑战。因为官网的教程,在当前版本的 Xcode NDK 环境中,已经不适用了。以前只是编译了适用于真机的 Luajit 库。.../lib_os.c:52:14: error: 'system' is unavailable: not available on iOS 问题的原因大致是,此处的判断,已经最新的 Xcode 极其编译环境中...注意:编译 Android 或其他平台库时,不需要修改此处源码。 完整的 iOS 编译命令: build-ios.sh 建议最好以 sh 文件的方式,直接执行,命令行输入,可能会触发诡异的未知问题。...其中一个很关键的原因是: 复制粘贴指令时,部分文本编辑器(比如 mac 的备忘录)会混入特殊字符,导致编译指令运行失败。 #!/bin/bash # LuaJIT 的源码路径 LUAJIT=....-j -C $LUAJIT HOST_CC="gcc -m32 " CROSS=$IOSBIN TARGET_FLAGS="$ISDKF" TARGET=armv7 TARGET_SYS=iOS mv

2.3K00

从零开始学习gcc基础内容之flag

从零开始学习gcc基础内容之flag 大家经常在编译代码时通常会使用一些gcc flags,今天这篇文章来梳理一下一些比较重要的gcc flag。 1.优化flag 优化标志用于提高编译代码的性能。...-Werror:该标志将警告视为错误,使编译遇到警告时停止编译过程。 4.预处理器Flag 预处理器标志负责处理源代码中以#开头的指令。这些标志定义宏并控制编译。...平台特定标志包括: -march:该标志指定目标架构。例如,-march=native指示GCC优化为主机机器的架构。 -m32-m64:这些标志指定是为32位还是64位目标进行编译。...7.其他Flag 除了前面提到的类别,还有一些其他标志。 一些常用的杂项标志包括: -std:该标志指定要使用的C语言标准版本。例如,-std=c99选择C99标准。...需要注意的是,标志的可用性功能可能会因GCC的不同版本和平台而有所变化。因此,建议查阅GCC文档相关资源,获取有关特定标志及其用法的详细信息。

21510

不得不说,minigui真的很坑

开发项目嵌入式平台上使用MiniGui作为用户界面开发工具,工作之余准备ubuntu14.04搭建一个测试环境,这样代码测试起来比较方便。...但是我的编译系统无法换,看了下,直接在对应的makefile里面修改把该模块编译为32位。如下: CFLAGS = -m32 -g -O2 CFLAGS加上-m32就可以了。...(这个最好用32位的系统来编译,不然所有makefile都要修改,比较麻烦) 复习: 复习一下GCC命令行参数,看看各个版本的区别—— 32位版:加上 -m32 参数,生成32位的代码。...当没有-m32或-m64参数时,一般情况下会生成跟操作系统位数一致的代码,但某些编译器存在例外,例如—— 32位Linux下的GCC,默认是编译为32位代码。...Window系统下的MinGW-w64(例如安装了TDM-GCC,选择MinGW-w64),默认是编译为64位代码,包括32位的Windows系统下。

3.6K30

Linux Kernel CMPXCHG函数分析

好了,让我们来看Linux Kernel中的cmpxchg(网上找来的,我自己机器没找到对应的头文件,据说include/asm-i386/cmpxchg.h)实现: 01./* TODO: You...cmpxchg中,注意"0"(_old),这个是困惑我的地方,它像告诉你(_old)第0号操作数使用相同的寄存器或者内存,即(_old)的存储0号操作数一样的地方。...cmpxchg中,就是说_old__ret使用一样的寄存器,而__ret使用的寄存器是eax,所以_old也eax。...翻译一下: 比较eax目的操作数(第一个操作数)的值,如果相同,ZF标志被设置,同时源操作数(第二个操作)的值被写到目的操作数,否则,清ZF标志,并且把目的操作数的值写回eax。...好了,把上面这句话套在cmpxchg就是: 比较_old(*__ptr)的值,如果相同,ZF标志被设置,同时_new的值被写到(*__ptr),否则,清ZF标志,并且把(*__ptr)的值写回_old

4.2K100

powershell:脚本中检查mingw-w64编译器是否能生成 3264位代码

mingw-w64提供的编译器不同的版本生成代码的能力是不一样的,有的只能生成32位代码 有的只能生成64位代码,powershell脚本中,为了自动化执行编译,就需要事先检查指定编译的生成代码的能力...基本的原理就是指定-m32或-m64选项让编译编译一个.c文件,如果不报错,就说明它能生成32或64位代码。...is not gcc compiler" if($arch -eq 'x86'){ $c_flags='-m32' }elseif($arch -eq 'x86_64'...系统 temp 文件夹下生成一个临时 .c 文件 echo "int main(){return 0;}`n" |Out-File "$test.c" -Encoding ascii -Force...# 调用指定的编译命令行编译 .c 文件 cmd /c "$gcc_compiler $test.c $c_flags -o $test >nul 2>nul" exit_on_error

884100

运行程序时报错“Value too large for defined data type”

下列错误,可能是因为64位跑32位程序: Value too large for defined data type 此错误对应的出错代码为EOVERFLOW,原因可能是目标文件超过2GB...下列代码可能会导致这个错误出错(为何说是可能,本节最后部分解释): // g++ -g -o x x.cpp -m32 #include...(可理解为默认编译参数)可能并不相同,因此导致结果是可能,原因是宏“-D_FILE_OFFSET_BITS=64”会影响结果,如果定义了,则效果如同最后一段代码,否则报错“Value too large...相关宏:_LARGEFILE64_SOURCE__USE_FILE_OFFSET64,相关LIBC头文件:features.h。...默认机器相关编译参数 gcc -march=native -c -Q --help=target 附2:查看GCC默认定义的宏 gcc -posix -E -dM - 或: cpp -dM

1.9K10

linux装载启动可执行程序的过程

gcc -E -o hello.cpp hello.c -m32 (源代码) 将所有的#define删除,并且展开所有的宏定义 处理所有的条件预编译指令,比如#if #ifdef #elif #else...-m32 (汇编代码) 编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后生成相应的汇编代码 汇编:gcc -x assembler -c hello.s -o hello.o...-m32(目标代码) 汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令 链接:gcc -o hello hello.o -m32 (可执行文件) 通过调用链接器ld来链接程序运行需要的一大堆目标文件...通过gdb调试,我们知道printf实际是调用了puts函数: ? IDA打开动态链接的hello文件: ?...可以看到puts函数通过PLT表0x080482F0的位置跳转到GOT表0x0804A00C的位置,查看GOT表验证: ? IDA打开静态链接的hello文件: ?

3K40

写一个操作系统_09 C语言和汇编语言

函数调用约定 编译器一般使用堆栈实现函数调用,每个进程都有自己的栈,栈来传递参数,会带来以下问题: 参数存储栈中,那么谁来负责回收参数所占的栈空间,是调用者?...push 3 call sub 被调: push ebp mov ebp,esp mov eax,[ebp+8] sub eax,[ebp+12] pop ebp // 恢复 ebp C...& ASM 混合 C汇编混合编程有两种方式: 用汇编C单独写单独编译,然后链接在一起 C代码嵌入汇编 C代码嵌入汇编: char* str = "C & ASM Code\n"; int count...edx;\ int $0x80;\ movl %eax,count;\ popa;\ "); } // gcc...-m32 casm.c 内联汇编及其扩展 上面的例子是内联汇编的一个例子,基本的内敛汇编功能比较薄弱,在此基础GCC添加了扩展功能,C语言里面扩展汇编真的不舒服,相当于多了一种语言,需要依据其规则

94920

内联汇编很可怕吗?看完这篇文章,终结它!

源码中嵌入了两个汇编代码,因此可以看到 gcc 编译器生成的汇编代码中包含了这两部分代码。 这 2 部分嵌入的汇编代码都是空指令 nop,没有什么意义。...return 0; } 生成汇编代码指令: gcc -m32 -S -o test3.s test3.c test3.s 中可以看到没有 a, b, c 的导出符号,a b 没有其他地方使用...我们来尝试编译成可执行程序: $ gcc -m32 -o test3 test3.c /tmp/ccuY0TOB.o: In function `main': test3.c:(.text+0x20):...输出输入操作数列表的格式 系统中,存储变量的地方就2个:寄存器内存。...编译器选择的)取了一个别名 v3; 输入操作数列表:给寄存器(gcc 编译器选择的)取了一个别名 v1 v2; 起立别名之后,在内联汇编代码中就可以直接使用这些别名( %[v1], %[v2],

1.9K20

C语言:如何给全局变量起一个别名?

stackoverflow看到一个有趣的话题:如何给一个变量设置一个别名?(How to assign to a variable an alias?)...示例代码中一共有 2 个文件:main.cplugin.c。 main.c中定义了一个全局变量数组,编译成可执行程序main。 plugin.c中通过一个别名来使用main.c中的全局变量。...这样的话,插件中就可以通过一个别名来使用真正的变量了(比如:修改变量的值)。 本质,这仍然是通过指针来进行引用。 只不过利用动态注册的思想,把指针与变量的绑定关系时间空间上进行隔离。...: gcc -m32 -fPIC --shared plugin.c -o libplugin.so gcc -m32 -o main main.c -ldl 执行结果: data[0] = 10...: gcc -m32 -fPIC --shared plugin.c -o libplugin.so gcc -m32 -rdynamic -o main main.c -ldl 执行结果: data

1.2K20
领券