C编译报错relocation truncated to fit: R_X86_64_PC32 against symbol `b' defined in .bss

   问题如下图所示:(.text+0x53a): relocation truncated to fit: R_X86_64_32S against `.bss'

    以前在linux中编译程序,从来没有遇到过这种问题,今天第一次遇到。查了一些资料发现时内存的限制,自己还有些疑问,以前编译内存大小是4G的程序都没出现过这种错误。

      看到一些博文中说是内存超过2G会出现问题。需要添加编译选项:-mcmodel

调整编译时的对静态数组要求的大小:-mcmodel=medium(中级)  -mcmodel=large(高级)

 具体编译选项添加位置:

       gcc -mcmodel=medium -o  stream2g_10  stream.c

或者在makefile文件中对应位置添加即可。

 

        找了以前编译的命令 gcc -O stream.c -o stream  就顺利通过了,-O这个优化参数也好神奇。

        


       但是-O失效的时候,还是-mcmodel 比较实用,当单个数组大小为2G,这个代码占用内存6G时,-O已经解决不了问题。
---------------------
作者:lisary_2017
来源:CSDN
原文:https://blog.csdn.net/ai297313/article/details/42711837
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(C编译报错relocation truncated to fit: R_X86_64_PC32 against symbol `b' defined in .bss)