gcc相关内容

为什么编译器在堆栈中分配的比需要的多?

我有一个简单的 C 程序.比方说,例如,我有一个 int 和一个长度为 20 的 char 数组.我总共需要 24 个字节. int main(){字符缓冲区[20];整数 x = 0;缓冲区[0] = 'a';缓冲区[19] = 'a';} 堆栈需要与 16 字节边界对齐,因此我假设编译器将保留 32 字节.但是当我用 gcc x86-64 编译这样的程序并读取输出程序集时,编译器保留了 6 ..
发布时间:2021-11-27 08:08:30 其他开发

来自带有预处理器指令的 c 代码的 AST

如何从 gcc C 代码构建 AST(抽象语法树)以进行一些转换,如下所示,然后再次将代码复制(生成)为 C 语法? if(condition_1){//代码行1}#ifdef 表达式_1否则如果(条件_2){//代码行2}#万一 进入 bool test = condition_1;如果(睾丸){//代码行1}#ifdef 表达式_1if(!(test) && condition_2){ ..
发布时间:2021-11-26 18:04:42 其他开发

如何在`GCC`中获取`c`程序的抽象语法树

如何在gcc中获取c程序的抽象语法树? 我正在尝试将 OpenMP pragma 自动插入到输入 c 程序中. 我需要分析嵌套的 for 循环以查找依赖项,以便我可以插入适当的 OpenMP 编译指示. 所以基本上我想做的就是遍历分析输入c程序的抽象语法树. 我如何实现这一目标? 解决方案 您需要完整的数据流才能找到“依赖项".然后您将需要实际插入 OpenMP 调用. 您想 ..
发布时间:2021-11-26 18:01:46 其他开发

GCC编译器AST-tree的修改

需要使用 GCC 插件收集有关翻译单元的必要信息,并在其基础上修改 AST.我已经知道如何收集信息了.但是我还不明白在将 AST 传递到 CRT 之前如何修改它.关于这个主题的信息很少.请告诉我关于这个主题我应该阅读什么?分享想法、链接. 谢谢. 附言我已经阅读了这些链接上的所有内容: http://en.wikibooks.org/wiki/GNU_C_Compiler_Int ..
发布时间:2021-11-26 17:58:41 其他开发

使用 GraphViz 理解 -fdump-tree 输出 gcc

我创建了一个树转储,这里描述的是:如何将 gcc 生成的抽象语法树转储到 .dot 文件中? 对于这个虚拟脚本: int fact(int n) {如果 (n 以及我得到的图像: 据我所知,gcc 不是学习 AST 表示的最佳方式.但无论如何,了解图像内容的含义会很好. 特别是这里的%符号和FREQ:0语句是什么意思? 解决方案 您链接的答案显示了如何获取 控制流图来自 G ..
发布时间:2021-11-26 17:57:41 其他开发

从 C 代码构建 AST

如何从 gcc C 代码构建 AST(抽象语法树)以进行一些修改,例如将一些 int 变量转换为浮点数,然后再次将代码复制(生成)为 C 语法. 实际上,就目前而言,我真正需要的唯一功能是从由几行组成的 c 程序中提取变量及其类型表......我认为有一个简单的解析器可以这样做. 我有一些变量,例如: int var_bss ;浮动 var_f_bss;int var_data = ..
发布时间:2021-11-26 17:42:33 其他开发

如何将 gcc 生成的抽象语法树转储到 .dot 文件中?

我认为问题的标题是不言自明的,我想将 gcc 生成的抽象语法树转储到 .dot 文件(Graphviz 生成的那些文件)中,因为然后我想在 .png 文件或类似文件中查看它.有什么办法可以做到吗? 提前致谢:) 解决方案 有两种方法,都包含两个步骤 使用 GCC 内部 vcg 支持 用 vcg dumps 编译你的代码(比如 test.c) gcc -fdump-t ..
发布时间:2021-11-26 17:39:30 其他开发

为什么 gcc 和 clang 允许我构造一个抽象类?

以下代码可在各种 gcc 和 clang 版本上编译 - 当使用 gcc 5.3.1 编译和运行时,它会打印 A() 然后以纯虚调用错误中止. #include A级{民众:一种() {printf("A()\n");}虚拟无效 b() const = 0;};int main(){const A&一种{};a.b();返回0;} 我意识到将引用绑定到临时对象并不理想(尽管我认为这 ..
发布时间:2021-11-26 16:59:51 C/C++开发

如何使用 GCC 在绝对地址处声明变量?

我们正在研究链接器在我的一门课程中的工作方式,其中一项作业是一个涉及 nm 命令的小练习.本质上,我们只想匹配 nm 为每个变量打印的类型和值.例如: char* B = NULL; 将给出地址(不相关)然后是 B B.我已经成功地为除 A 之外的所有标签完成了此操作.我已经读到这仅意味着该值是绝对值并且不能被链接器更改.我已经尝试了许多组合,包括 volatile、const、static、 ..
发布时间:2021-11-26 16:05:49 其他开发

有什么办法可以在 Linux 的 32 位程序中获得 64 位的 time_t?

在 Windows 上,我可以调用: _time32(__time32_t);//得到 32 位的 time_t_time64(__time64_t);//获得 64 位的 time_t (在 32 位和 64 位程序中) 在 Linux 中有没有办法做到这一点(使用 GCC 编译)? 解决方案 显然,不,这是不可能的.对于初学者来说,Linux 中只有一个 time() 函数, ..
发布时间:2021-11-26 14:56:06 服务器开发

/usr/bin/ld: 在搜索 foo 时跳过不兼容的 foo.so

我使用的是 Ubuntu 13.10 64 位,在编译 vlfeat 库的 python 包装器时出现以下错误. g++ -o _vlfeat.so ../../vl/aib.o ../../vl/generic.o ../../vl/hikmeans.o ../../vl/ikmeans.o ../../vl/imopv.o ../../vl/mathop.o ../../vl/pgm.o . ..
发布时间:2021-11-26 14:42:53 服务器开发

什么时候应该使用 gcc 的 -m32 选项?

我正在编写一个程序,如果我在 Suse 10 32 位系统上编译而不添加 -m32 选项并在 Suse 10 64 位系统上执行它,它可以正常工作. 这种情况,是不是我不需要添加-m32选项? 我们能否直接在 64 位系统上执行在 32 位系统上构建的程序而没有任何副作用?或者是否需要更新或更改? 解决方案 在 64 位操作系统上运行 32 位可执行文件没有问题(只要存在并找到 ..
发布时间:2021-11-26 14:42:01 其他开发

使用 CMake 强制进行 32 位编译的正确方法

抱歉,有很多类似的问题,但我确实发现谷歌搜索 CMake 查询总是会产生类似但不相同的场景、冲突的 CMake 命令等等! 我需要强制我的项目构建 32 位二进制文​​件,因为我必须链接一个只能作为 32 位使用的库.我根据错误消息对此进行了诊断,例如: /usr/bin/ld: i386 架构的输入文件 `*external-32bit-lib*' 与 i386:x86-64 输出不兼容 ..
发布时间:2021-11-26 14:41:34 C/C++开发

内联汇编 - cdecl 和准备堆栈

我最近一直在尝试通过使用缓冲区和不同汇编运算符的 RAW 十六进制等效项在 C++ 中实现动态函数.举例说明一个简单的跳转: byte * buffer = new buffer[5];*缓冲区 = '0xE9';//十六进制跳转*(uint*)(buffer + 1) = '地址目的地'; 我在汇编方面没有经验,但我知道足以创建非常简单的函数.现在我正在原始内存中创建 cdecl 函数.问题 ..
发布时间:2021-11-26 14:27:04 C/C++开发

32 位机器如何处理大于 2^32 的数字?

我试图了解涉及大于 232 的数字的计算是如何在 32 位机器上发生的. C 代码 $ cat size.c#include#includeint main() {printf ("最大 unsigned long long = %llu\n",(unsigned long long)(pow(2, 64) - 1));}$ gcc 输出 $ gcc size.c -o size$ . ..
发布时间:2021-11-26 14:21:31 其他开发

如何在 64 位 RHEL 上编译 32 位应用程序?

我正在尝试使用 gcc 4.8 在 RHEL 7 64 位上编译 32 位 C 应用程序.我收到编译器错误 /usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory.我需要做什么才能编译和链接 32 位应用程序? 解决方案 要让 RHEL 7 64 位编译 gcc 4.8 32 位程序,您 ..
发布时间:2021-11-26 14:11:43 其他开发

#ifdef 用于 32 位平台

在我维护的一个应用程序中,我们遇到了影响 stdlib 的文件描述符限制问题.此问题仅影响标准库的 32 位版本. 我已经为我的代码设计了一个修复程序并希望实现它,但仅限于为 32 位可执行文件编译时.我可以用什么预处理器符号 #ifdef 来确定代码是为 32 位还是 64 位目标编译的? 编辑 抱歉,没提,代码是跨平台的,linux,windows,solaris等一些uni ..
发布时间:2021-11-26 14:11:10 C/C++开发

Apple 的 gcc,-arch i386 和 -m32 有什么区别?

根据 Apple 的gcc 4.2.1 文档: -拱形拱门 为指定目标编译建筑拱门.允许的值为“i386"、“x86_64"、“ppc"和'ppc64'.多种选择有效,并且指示编译器生成“通用"二进制文件,包括对象指定的每个架构的代码带-arch.此选项仅适用于汇编程序和库可用对于指定的每个架构.(仅限苹果) 那么这两个调用之间有什么区别: gcc -arch i386 程序.c ..
发布时间:2021-11-26 14:09:07 其他开发