Tag: gcc

有选择地抑制glibc链接警告?

glibc使用以下“技术”来生成链接警告…… #define link_warning(symbol, msg) \ __make_section_unallocated (“.gnu.warning.” #symbol) \ static const char __evoke_link_warning_##symbol[] \ __attribute__ ((used, section (“.gnu.warning.” #symbol __sec_comment))) \ = msg; 对于由此生成的特定链接警告,是否有任何命令行开关可以传递给ld或gcc以抑制它? (对于编译时警告,你可以使用`#pragma diagnostic foo ignore来抑制)

gcc -o stdlib.h语法错误c攻击剥削艺术

我正在使用VM(虚拟机箱)运行其附带的LiveCD(Ubuntu 7.04),从第二版Jon Erickson的“黑客:剥削艺术”开始。 在第0x272节“使用堆”中,作者使用第77-79页上的示例解释了malloc()和free()函数。 heap_example.c的代码如下: #include #include #include int main(int argc,char *argv[]){ char *char_ptr; int *int_ptr; int mem_size; if(argc ‘%s’\n”,char_ptr,char_ptr); printf(“\t[+]allocating 12 bytes of memory on the heap for int_ptr\n”); int_ptr = (int *)malloc(12); if(int_ptr == NULL){ fprintf(stderr,”Error:could not allocate heap memory.\n”); exit(-1); } *int_ptr = 31337; printf(“int_ptr (%p)–> %d\n”,int_ptr,*int_ptr); printf(“\t[-]freeing char_ptr’s heap memory…\n”); free(char_ptr); […]

用于位测试和设置的组件(BTS)

struct node* address; //format 我想用BTS primefaces设置flagBit1位。 编辑 我想盲目地设置这一点,而不关心它是否先前设置过 我可以使用汇编代码来完成这一过程,如使用gcc编译器使用bts汇编指令 但是,我可以使用哪种内在可移植到不同的架构? 例如, gcc Atomic __sync_fetch_and_or有__sync_fetch_and_or 。 这是否与BTS具有相同的属性?

在Linux中是否存在_set_purecall_handler()的等效项?

我想用自己的方法覆盖纯虚拟调用的标准处理程序( __cxa_pure_virtual() )。 Windows的答案是’_set_purecall_handler()’。 Linux / GNU中是否有类似的工具?

在Windows 8上使用MinGW在cmd中编译C ++

我正在尝试从命令行编译c ++程序,但我不能。 我尝试了这里列出的所有步骤和说明。 我安装了MinGW,但是我在安装的最后一步陷入困境,解释了如何更改环境路径。 在环境变量上根本没有PATH的一部分,当我尝试添加它甚至编辑系统变量中的那个时,编译不起作用(当我在命令提示符下键入g ++时没有出现)。 我在网上搜索了解决方案,但我找不到任何东西。 重新安装MinGW32解决了根本无法编译C ++的问题。 在我的计算机属性中的高级设置下的PATH变量中添加;C:\mingw\bin在cmd中修复编译,如@Chrono Kitsune所述。

当矩阵维数不是4的倍数时,如何避免AVX2的错误?

我使用AVX2,C中的FMA制作了矩阵向量乘法程序。我使用GCC ver7编译了-mfma,-mavx。 但是,我收到错误“释放对象的校验和不正确 – 对象可能在被释放后被修改。” 我认为如果矩阵维度不是4的倍数,则会产生错误。 我知道AVX2使用ymm寄存器,可以使用4个双精度浮点数。 因此,如果矩阵是4的倍数,我可以毫无错误地使用AVX2。 但是,这是我的问题。 如果矩阵不是4的倍数,我怎样才能有效地使用AVX2 ??? 这是我的代码。 #include “stdio.h” #include “math.h” #include “stdlib.h” #include “time.h” #include “x86intrin.h” void mv(double *a,double *b,double *c, int m, int n, int l) { __m256d va,vb,vc; int k; int i; for (k = 0; k < l; k++) { vb = _mm256_broadcast_sd(&b[k]); for (i = […]

为什么snprintf会改变输出字符串?

我尝试使用snprintf将一些数字转换为字符串。 name1在逗号后应与name2具有相同的数字。 #include #define length 50 int main() { char name1 [length]; char name2 [length]; double step= 0.00001; unsigned long long int iterMax =100000000000; int k; for (k = 0; k <= 20; k++) { printf("numbers : k = %2d ; k*step = %f ;", k, k*step); snprintf(name1,length+1,"%f", iterMax+k*step); /* */ snprintf(name2,length+1, " %f", k*step); […]

如何在GDB中调试libgcc源代码? Ubuntu 14.04.1

我想在Ubuntu 14.04.1的源代码级别的GDB中调试libgcc_s.so.1 。 所以我下载了libgcc1-dbg并获得了gcc的源代码。 在GDB中,我使用directory来指定gcc源目录。 但是当我在GDB中出现一些问题,并在libgcc_s.so.1中断时,我无法获得源代码。 Reading symbols from /home/love/pri…(no debugging symbols found)…done. (gdb) directory ~/source/gcc-4.9/ Source directories searched: /home/lovelydream/source/gcc-4.9:$cdir:$cwd (gdb) c The program is not being run. (gdb) run Starting program: /home/lovelydream/prison warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000 > Program received signal SIGINT, Interrupt. 0x00007ffff75e6350 in __read_nocancel () […]

是否可以成功包装退出方法?

我目前正在使用gcc 4.1.2并且我有一个用例,我想使用链接器选项来包装exit方法。 让我们立即抛开所有典型的回答/评论,“为什么你甚至想要那样做?” 我想知道的是,甚至可以做到这一点。 我之前使用链接器包装了其他方法,没有任何问题。 下面是我正在使用的__wrap_exit函数的快速示例: void __wrap_exit(int _status) { return; } 当调用exit时,确实调用了这个包装器。 但是,程序在__wrap_exit返回后立即遇到分段错误。 即使没有调用真正的退出函数并且只有包装器版本,gcc会在幕后做一些事情,例如在调用exit时发出信号吗? 可以提供幕后发生的一些细节吗?

为什么我可以在gcc上声明一个预定大小的数组,但不能在visual studio c ++上声明?

我想知道为什么我可以在linux中执行此代码而不是在visual studio上执行此代码? (文件 – > main.c) int size; printf(“Size:”); scanf(“%d”,&size); int vec[size]; 它与c89或c99标准有什么关系吗? 因为我试图改变gcc上的标志,但仍然有效。