導航:首頁 > 源碼編譯 > 編譯和運行的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版本不同相關的資料

熱點內容
樂高機器人nxt編程軟體 瀏覽:583
linuxx264編譯 瀏覽:343
華夏銀行網銀盾用什麼app 瀏覽:583
單片機棧區 瀏覽:64
直流馬達如何連接5v單片機 瀏覽:261
後綴為win的文件怎麼解壓 瀏覽:802
壓縮包解壓後為什麼一張白紙 瀏覽:585
伺服器和雲盒子 瀏覽:172
python畫cad電氣圖 瀏覽:419
三菱plcfx3sa編程電纜 瀏覽:314
山西視頻加密防盜 瀏覽:839
華為mml命令查看用戶量 瀏覽:907
場論朗道pdf 瀏覽:373
如何使用qtquick編譯器 瀏覽:50
山西高配伺服器雲伺服器 瀏覽:744
為什麼編譯按f9沒反應 瀏覽:122
購物app都適合買什麼東西 瀏覽:277
savetxt函數python 瀏覽:577
編譯器小端改大端 瀏覽:642
華為安卓哪些文件夾能刪除 瀏覽:406