linuxgcc64位
A. 64位linux下的GCC如何編譯出一個32位可執行程序
理論上安裝支持環境,之後64位的gcc編譯成32位程序,就加-m32參數即可。
當然還一個辦法是裝個32位的gcc。
另外,交叉編譯也適用於x86架構。
不過這么編譯經常會出現各種問題,所以編譯32位的程序,最好還是用32位系統。
不一定重裝,用chroot和setarch命令配合即可弄出一個32位的子系統。
B. linux下,gcc提示「段錯誤 (核心已轉儲)」,ubuntu剛上手不大會用,誰說一下是啥問題
主要有以下幾個方面的原因:
一、內存訪問出錯
這類問題的典型代表就是數組越界。
二、非法內存訪問
出現這類問題主要是程序試圖訪問內核段內存而產生的錯誤。
三、棧溢出
Linux默認給一個進程分配的棧空間大小為8M。c++申請變數時,new操作申請的變數在堆中,其他變數一般在存儲在棧中。
因此如果數組開的過大變會出現這種問題。
(2)linuxgcc64位擴展閱讀:
注意事項
段錯誤一般就是指訪問的內存超出了系統所給這個程序的內存空間,通常這個值是由gdtr來保存的,他是一個48位的寄存器,其中的32位是保存由它指向的gdt表,後13位保存相應於gdt的下標,最後3位包括了程序是否在內存中以及程序的在cpu中的運行級別,指向的gdt是由以64位為一個單位的表,在這張表中就保存著程序運行的代碼段以及數據段的起始地址以及與此相應的段限和頁面交換還有程序運行級別還有內存粒度等等的信息。
一旦一個程序發生了越界訪問,cpu就會產生相應的異常保護,於是segmentation fault就出現了。在編程中基本是是錯誤地使用指針引起的。
C. 如何用GCC編譯64位linux程序
在64位的linux下編譯就行,和32位的編譯是一樣的
gcc -Wall a.c -o a
有Makefile就直接make
D. gcc編譯錯誤!
提示是說編譯的時候加上參數-fPIC,和你做的完全不一樣。
當輸入文件為.c、.cxx、.cpp等等時,gcc先編譯後鏈接
當輸入文件是.o時gcc只執行連接步驟。
應該的命令行類似:
gcc -c -fPIC palindrome.c -o palindrome.o
E. 如何在64位的Linux系統上使用匯編和C語言混合編程 第2頁
編譯和鏈接的時候使用的指令:(AMD處理器,64位操作系統)
編譯鏈接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -c bar.c -o bar.o
3 ld -s -o foobar bar.o foo.o
匯編語言用nasm編寫並用nasm編譯器編譯,而C語言用的是gcc編譯,這些都沒有問題,但是在鏈接的時候出錯了,提示如下:
ld: i386 architecture of input file `foo.o' is incompatible with i386:x86-64 output
google了一下,意思就是nasm 編譯產生的是32位的目標代碼,gcc 在64位平台上默認產生的是64位的目標代碼,這兩者在鏈接的時候出錯,gcc在64位平台上默認以64位的方式鏈接。
這樣在解決的時候就會有兩種解決方案:
<1> 讓gcc 產生32位的代碼,並在鏈接的時候以32位的方式進行鏈接
在這種情況下只需要修改編譯和鏈接指令即可,具體如下:
32位的編譯鏈接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -m32 -c bar.c -o bar.o
3 ld -m elf_i386 -s -o foobar foo.o bar.o
具體的-m32 和 -m elf_i386 請自行查閱gcc (man gcc)
如果你是高版本的gcc(可能是由於更新內核造成的),可能簡單的使用-m32 的時候會提示以下錯誤(使用別人的歷程,自己未曾遇到):
> In file included from /usr/include/stdio.h:28:0,
> from test.c:1:
> /usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
> compilation terminated.
這應該是缺少構建32 位可執行程序缺少的包,使用以下指令安裝:
sudo apt-get install libc6-dev-i386
此時應該就沒有什麼問題了。
F. x86 64 linux gnu gcc 是什麼意思
就是64位的GCC編譯器,一種開源的C/C++編譯器
G. 64位linux下面的GCC如何編譯出一個32位可執行程序
編譯64位程序,不一定要編譯機器是64位的,但是32位機器默認安裝的gcc編譯環境還是不能用來編譯64位程序。
編譯64位程序,需要加上-m64編譯器參數,默認安裝的gcc已經支持該參數,但是缺少64位機器指令相關的文件,所以不能編譯,會出現下面的錯誤
In file included from /usr/include/features.h:378,
from /usr/include/assert.h:37,
from ../../../include/tinyxml/tinystr.h:42,
from ../../../src/tinyxml/tinystr.cpp:32:
/usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: 沒有那個文件或目錄
這時候需要安裝 gcc所有支持文件 sudo apt-get install gcc-multilib
將會安裝下列額外的軟體包:
cpp-4.4 g++-4.4 gcc-4.4 gcc-4.4-base gcc-4.4-multilib lib64gcc1 lib64gomp1 libc6-amd64 libc6-dev-amd64 libgcc1 libgomp1
libstdc++6 libstdc++6-4.4-dev
建議安裝的軟體包:
gcc-4.4-locales g++-4.4-multilib gcc-4.4-doc libstdc++6-4.4-dbg libmudflap0-4.4-dev libgcc1-dbg libgomp1-dbg libmudflap0-dbg
libcloog-ppl0 libppl-c2 libppl7 lib64mudflap0 libstdc++6-4.4-doc
下列【新】軟體包將被安裝:
gcc-4.4-multilib gcc-multilib lib64gcc1 lib64gomp1 libc6-amd64 libc6-dev-amd64
下列軟體包將被升級:
1. 編譯連接成 32 位的 windows xp 32位系統下可運行的程序;
2. 編譯連接成 64 位的 windows vista 64位系統下可運行的程序;
3. 編譯連接成 32 位的 ubuntu 32位系統下可運行的程序;
4. 編譯連接成 64 位的 ubuntu 64位系統下可運行的程序。
老師出的題,不太懂怎麼實現