导航:首页 > 源码编译 > 编译和运行的gcc版本不同

编译和运行的gcc版本不同

发布时间:2022-06-11 08:04:58

㈠ C语言编译器icc与gcc编译出来的执行文件有什么区别

ICC 是intel 针对intel 体系架构开发的编译器,显然,你的代码,如果运行在intel机器上,intel的人开发的编译器,编译出来的可执行代码效率更高。毕竟人家对intel体系结构这么熟悉,里面的优化说明的,肯定做得不错。但是只能运行在intel体系结构上。比如你的PPC的板子就不能运行了。

GCC是一般性的通用的编译器,可以编译运行在各种体系结构上的代码,比如intel, PPC, ARM, MIPS。它很通用。里面的开发者,当然也熟悉intel 体系架构。但是也要考虑到通用。所以,是一般化的选择。在intel体系结构上运行的话,可能某些地方不如ICC的效率高。

他们实现的原理基本是一致的,但是在细节上,肯定差别很大。比如针对同一种语句,有的会告警,有的不会。有些支持扩展特性。有些不支持。

linux 下的gcc和windows 下的gcc相同吗gcc的源代码是否相同对同一程序编译出来的可执行文件是否相同

linux下的gcc 和 windows下的gcc,是GNU针对两个不同的平台发行的,两个不同版本的编译器,源代码不完全相同,但大部分地方是相同跨平台的代码。只需要用的时候,configure成相应的平台,它就会编译成相应平台用的gcc。
对于同一个程序,在两个不同的平台下编译出来的可执行文件是不相同的,linux下编译好的helloWorld程序在windows上面是不能运行的。
但是,linux下编译好的helloworld在linux下运行,与windows下编译好的helloworld在windows里运行的效果,是相同的。

㈢ 编译环境与生产环境gcc版本不一致是否会有问题

有一些abi兼容性问题,如果你的程序有静态或动态链接不全支持c++11的libc的话。

如果你的程序完全是用gcc 4.84编译链接出来,也没有动态链接低版本的libc的话应该没有问题

㈣ 关于gcc编译选项选取动态库不同版本的问题

不同版本的动态库是为了升级方便,旧的程序需要与旧的库链接,新的程序与新的.

一般的做法是把libabc.so连接(symbolic link, ln -s libabc.so.N libabc.so)到最新的版本,这样以后的新程序,在用gcc -labc的时候,都会链接到新的版本.旧的已经链接好的程序并不会产生不兼容的问题,因为旧程序在过去已经链接过了(动态库链接的信息可以用ldd来查看: ldd /bin/ls).

symbolic link, ln是推荐的维护版本的办法,不建议更改文件名.

如果你要有一个方便的办法链接旧的版本, 建一个旧的版本的symbolic link就可以了,libabc11.so
ln -s libabc.so.11 libabc11.so
gcc -labc11...

㈤ Linux 下查看 gcc 版本:gcc -v 和rpm -q gcc 区别

gcc -v是查看系统目前使用的gcc版本。
rpm -q gcc是Redhat/CentOS/Fedora/SuSE查看系统中是否安装了gcc rpm包。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

㈥ 关于ARM arm-linux-gcc编译器的疑问

首先编译器的选择跟处理器相关,所以arm的处理器一般只能采用arm相关的编译器。所以严格上来讲,根据所采用的ARM芯片的不同而采用不同版本的编译器也是对的,而且也建议这样做。但是编译器一般是向下兼容的,如果你的程序简单,你用了老版本的编译器编译,当然也可以在新处理器下运行咯,我记得我用gcc编译的程序,也可以在atmel9260的板子上运行呢。

㈦ Linux下的gcc编译后生成Linux下的可执行文件,window下gcc编译后是exe文件,为什么不一样啊是怎么做到的

首先,这win和Linux下的gcc功能是一样的,实际的gcc.exe和linux下的gcc这两个文件不是一样的,他们毕竟需要在工作在不同的平台上,而且他们做的一些工作是有区别的。
编译过程是把源文件翻译成机器码,然后链接成一个整体,拼接成一个文件。不管是win下的exe还是Linux下的ELF,都是按照一定规范来的,比如头部放什么,尾部放什么,中间又存哪些信息等。但是,如果要编译出正确的可执行的文件,不同的操作系统里就必须按照不同的规范来组织这个文件。
这些文件的执行过程,并不是说它们可以直接执行,执行的时候,系统把它们从磁盘上,读到内存中,经过一系列的前期工作,才可以最终执行起来,这个前期过程都是操作系统来搞定的。
你不应该问gcc是怎么做到的,而应该问gcc为什么需要这样。如果你需要知道细节,去看《程序员的自我修养》

㈧ linux编译器(如gcc)与windows编译器(vc6.0)有什么区别求详细的解答,和例证!

你好!编译器(在windows下,javac.exe)将源代码(java文件)编译为字节码(bytecode),存放在class文件中。

字节码不能直接在机器上执行,而是通过虚拟机(windows下是java.exe)执行。具体的执行方式有两种:

1. 一般情况下解释执行。解释执行并不是“解释为用c++语言写成的程序”,而是jvm把字节码看成脚本,根据字节码中的指令,由JVM去调用实际的本地方法。

2. 在打开了JIT参数的前提下,jvm会把执行过程中发现的热点位置,由jvm内部的即时编译器编译为本地机器码直接执行。
编译器将java文件编译为class文件,解释器将class文件变为机器语言

㈨ 在一个ubuntu系统中 对不同软件设置不同的gcc 版本

gcc是编译器,一般用于编译工程时可以在makefile之类的工程文件中指定不同的版本。
你运行虚拟机需要用到gcc?

㈩ 用不同版本GCC编译出的库只能用对应的GCC使用吗

不同版本的动态库是为了升级方便,旧的程序需要与旧的库链接,新的程序与新的.

一般的做法是把libabc.so连接(symbolic link, ln -s libabc.so.N libabc.so)到最新的版本,这样以后的新程序,在用gcc -labc的时候,都会链接到新的版本.旧的已经链接好的程序并不会产生不兼容的问题,因为旧程序在过去已经链接过了(动态库链接的信息可以用ldd来查看: ldd /bin/ls).

symbolic link, ln是推荐的维护版本的办法,不建议更改文件名.

如果你要有一个方便的办法链接旧的版本, 建一个旧的版本的symbolic link就可以了,libabc11.so
ln -s libabc.so.11 libabc11.so
gcc -labc11...

阅读全文

与编译和运行的gcc版本不同相关的资料

热点内容
積架小型空气压缩机 浏览:555
绿盾文档加密系统哪里有卖 浏览:637
我的世界怎么开挂在服务器里面 浏览:789
西门子自锁正反转编程图 浏览:749
出国英语pdf 浏览:920
算法线性匹配 浏览:674
山东省dns服务器云主机 浏览:554
安卓5g软件怎么隐藏 浏览:839
编译内核空间不足开不了机 浏览:887
汉纪pdf 浏览:474
在哪里下载国家医保app 浏览:657
没有与文件扩展关联的编译工具 浏览:426
我的世界反编译mcp下载 浏览:19
安卓手柄下载什么软件 浏览:70
pushrelabel算法 浏览:850
硬盘资料部分文件夹空白 浏览:617
cssloader的编译方式 浏览:941
java面板大小 浏览:506
怎么用命令方块打出字体 浏览:500
台湾加密货币研究小组 浏览:299