gcc相关内容

使用基类指针创建对象时,缺少派生类析构函数

在下面的代码示例中,未调用派生类析构函数。知道为什么吗? 我有一个具有虚函数的基类。现在,我使用基类指针来创建派生类的新对象。我的理解是,当销毁派生类对象时,首先调用派生类的析构函数,然后调用基类。然而,我只看到基类的析构函数被调用。有人知道我做错了什么吗,或者我对C++的理解在哪里不正确? #include #include using namesp ..
发布时间:2022-05-19 11:31:04 C/C++开发

[[可能]]和[[不太可能]]影响程序汇编的简单示例?

C++20向该语言引入了[[likely]]和[[unlikely]]属性,这些属性可用于允许编译器针对以下情况进行优化:一条执行路径比另一条执行路径更可能或更不可能。 考虑到不正确的分支预测的代价,这似乎是一个在代码的性能关键部分非常有用的功能,但我不知道它实际上会导致编译器做什么。 有没有一段简单的代码,添加[[likely]]和[[unlikely]]属性会更改编译器的程序集输出 ..
发布时间:2022-05-16 18:07:28 C/C++开发

英特尔C++编译器和GCC的基准测试

我有一个运行CentOS 5的AMD皓龙服务器。我想有一个相当大的基于C++Boost的程序的编译器。我应该选择哪个编译器? 推荐答案 我希望这不仅仅是帮助而不是伤害:) 一年多前的某个时候,我做了一次小小的编译器枪战,我快记不住了。 GCC 4.2(苹果) 英特尔10 GCC 4.2(苹果)+LLVM 我测试了我编写的多个模板密集型音频信号处理程序。 编译 ..
发布时间:2022-04-20 14:36:57 C/C++开发

在GCC 10.2.1而不是GCC 8.3.0上首次定义的&的多重定义

我查看了Stackoverflow和更广泛的Internet,发现此错误的最常见原因是声明(int var = 1;)和定义(int var;)合并,并包括.h文件中的.c文件。 我刚刚从一个文件拆分成几个文件的小项目没有做任何这些事情。我非常困惑。 我复制了项目并删除了副本中的所有代码(这很有趣),直到我到达此处: main.c #include "a.h" int m ..
发布时间:2022-04-20 11:58:22 服务器开发

在不修改内核的情况下拦截系统调用的最小开销方式

我知道拦截系统调用的方法如下。 使用ptrace,但这似乎有很高的开销。据我所知,像strace这样的工具也在内部使用ptrace。 使用内核模块更改系统调用表,但据我所知,这种方法在以后的Linux内核中不再可行。 使用LD_PRELOAD。但是,例如,如果您直接进行系统调用,而没有为该系统调用使用某些包装库函数,则这将不起作用。 所以您可以看到上面提到的所有方法都有缺陷。因此, ..
发布时间:2022-04-18 10:50:30 服务器开发

用GCC生成a.out文件格式

如何在x86架构上和GCC生成a.out文件格式? 使用NASM,我可以使用-f标志轻松完成此操作,例如: nasm -f aout start.asm objdump -a start.o start.o: file format a.out-i386-linux start.o 在Linux上,编译.c文件会生成ELF目标文件。如何使用GCC生成a.out文件? ..
发布时间:2022-04-17 11:18:13 其他开发

为什么GCC要求链接到p线程函数,而不需要参数来链接到其他函数?

如果我使用pTHREAD函数,则必须在GCC上使用&lpthread&qot;参数以确保正确链接。然而,为什么GCC在链接其他标准函数时不需要额外的参数?例如:printf、scanf、poix套接字等 推荐答案 在类Unix系统上,C库的某些部分历来是在单独的共享对象中实现的。编译器驱动程序(gcc)只与-lc(和动态加载器)隐式链接,而不是这些其他共享对象,例如-lm(数学库)、- ..
发布时间:2022-04-15 20:31:30 其他开发

GCC变量映射与MISRA-C

我主要知道两种方法(有许多变体,使用双字段,每个外围设备的数据结构,等等)使用GCC声明内存映射寄存器: 使用以右地址开头的指针,如volatile uint32_t *pMyRegister = (uint32_t *)0xDEADBEEFUL; 或定义一个变量并手动映射它,如volatile uint32_t MyRegister __attribute((section(".regi ..
发布时间:2022-04-10 17:20:21 其他开发

从GCC切换到g++进行交叉编译时,C使链接器未定义引用(&Q)

我有一个编译成功的C项目。现在我想在同一个项目中使用C++代码,所以我将main.c重命名为main.cpp。该项目是针对嵌入式微控制器的,因此我正在使用arm-none-eabi工具链进行交叉编译。 将主文件重命名为.cpp后,出现以下错误: Linking CXX executable discovery_simple_test.elf /usr/lib/gcc/arm-none- ..
发布时间:2022-04-10 13:41:31 C/C++开发

C中的";Short int";和";Short";有什么不同?

将变量声明为Short int和Short有什么区别? 在GCC编译器中,Short占用2个字节(用sizeof(Short)检查),Short int也给出了2个字节的大小。两者是否相同就是不同吗?在这种情况下,这些声明会有帮助吗? 提前谢谢 推荐答案 short是short int的缩写,它们在任何C编译器中都是等价的。 long int与long、long long ..
发布时间:2022-04-10 13:13:15 其他开发

在Qt Creator Android项目中调试外部共享库

我有一个使用外部C++库的Qt Quick Android应用程序。 我使用CMake自己构建了这个库,CMAKE_BUILD_TYPE被设置为Debug。当我在Qt Creator调试模式下启动应用程序时,我可以在Qt代码中的断点处停止,但它不会跳到库调用中,我只看到汇编程序清单。 可以告诉调试器库源代码在哪里吗?是否可以这样在Android中进行调试? 推荐答案 好的,这绝 ..
发布时间:2022-04-05 15:47:36 其他开发

在《GCC》中,我如何才能将温和的警告设置为静音?

我正在包含来自第三方库的文件,该文件会引发错误,可以使用-fpermissive将其降级为警告。但是因为我不想用这些警告污染我的编译日志,所以我想完全禁用此消息。 到目前为止,我在包含文件时将-fpermissive选项设置为diagnostic pragma;类似于: #pragma GCC diagnostic push #pragma GCC diagnostic warning ..
发布时间:2022-03-27 18:10:44 C/C++开发

LLVM与OS X上的clang

我有一个关于OS X上的llvm、clang和GCC的问题。 LLVM4.2、LLVM2.0和LLANG有什么不同?我知道它们都是基于llvm构建的,但它们有什么不同呢? 除了编译速度快,LVM比GCC还有什么优势? LLVM 推荐答案最初代表“低级虚拟机”,但现在它只是代表自己,因为它已经成长为不同于传统虚拟机的东西。它是一组库和工具,以及标准化的中间表示,可用于帮助构建 ..
发布时间:2022-03-21 22:01:08 C/C++开发

地址消毒器可以在检测到错误后立即中止吗?

我将syscall检查器与-fsanitize=address结合使用,当ASAN发现错误时,它会在打印报告时调用一些syscall(ioctl(ISATTY)等)。系统调用检查器中断ASAN的ioctls,并且未正确收集错误报告。 我想让ASAN在不打印报告或不打印报告的情况下简单地中止,这样就可以确定(可能使用libasan4 API调用)ASAN发现了错误,这样我就可以停止syscal ..
发布时间:2022-03-21 21:56:17 其他开发

告诉GCC不要链接libgomp,这样它就会链接libiop5

我需要找出一个可以提供给GCC的编译器/链接器指令,以便在指定-fopenmp时它不会自动链接libgomp。 原因是我试图针对Intel的MKL BLAS进行构建。MKL需要添加单独的英特尔库来处理多线程(例如,libmkl_intel_thread或libmkl_gnu_thread)。然而,并不是所有操作系统(包括我的操作系统)上都有用于链接MKL和libgomp的库。这迫使我链接li ..
发布时间:2022-03-17 09:37:09 其他开发