簡體   English   中英

編譯程序linux 32位vs 64位

[英]Compiling programme linux 32 bit vs 64 bit

我是32位vs 64位的新手。 我用Linux編寫了C ++程序。 我想知道程序是32位還是64位? 這是因為我從其他人編寫的makefile編譯程序。

我該如何檢查它,如何將其修改為64位?

謝謝。

要檢查程序是否為64位,可以編譯並運行

file <name-of-the-binary>

例:

~> file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

所以/bin/ls在我的系統上是32位。

代碼是編譯為32位還是64位取決於您的環境和編譯器設置。 要編譯64位程序,您需要64位內核 64位“userland” - 特別是64位版本的libc6和編譯器庫。 通常,您的編譯器只會為您的環境選擇適當的模式。

一些Linux發行版提供“混合”環境:64位內核,包含32位和64位庫。 如果您的環境是這樣的,您的編譯器可能會提供編譯兩種類型的二進制文件。 如何在它們之間進行選擇取決於您的硬件平台和編譯器。 對於x86-64平台上的gcc,編譯器開關可以是-m32-m64 - 只需查看gcc手冊頁即可。

您可以使用file命令檢查生成的可執行文件是32位還是64位。

然后,正如已經回答的那樣, -m64和-m32選項可用於指示編譯器。 您需要擁有所有可用的依賴項(庫)。

更改gcc的編譯選項(我認為是-m64而不是-m32),其中定義了編譯參數。

您還應該檢查外部依賴項(庫)是否也是64位,或者至少仍然可以使用64位代碼。

64位表示有64位(而不是32位)用於表示整數。 由於使用整數訪問內存,這意味着(因為您的整數可以更大),您可以索引更多內存。

編譯64位程序的最簡單方法是在64位計算機上編譯它,但編譯器也有標志(如另一個答案中所述),但它們可能有問題(如果您的依賴項不是64位也是如此) )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM