作者 主題: 在 32bit 環境(ubuntu 10.04)編譯 64bit 程式  (閱讀 5231 次)

0 會員 與 1 訪客 正在閱讀本文。

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
昨晚爬了 Embedded 版玩了一下,  將 ubuntu 10.04 放到記憶卡用 vbox 開機
玩得還算順利, 感謝 Embedded 版各位先進們分享的文章 m(_ _)m

後來想到一個問題, 如何在 32bit 環境將 cpp 編譯成 64bit 執行檔?
這幾年在 linux 環境工作後就很少再使用 c/c++ 寫程式
所以還真的沒試過如何在 32bit 環境用 gcc 編譯 64bit  程式
因為我自己現在用的環境是 ubuntu 10.04 x64 版
所以就另外用 vbox 安裝 ubuntu 10.04 x86 版編譯用


-----

$ g++ -m64 -o cpp01 cpp-01.cc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.4.3/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.4.3/libstdc++.a when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.4.3/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/i486-linux-gnu/4.4.3/libstdc++.a when searching for -lstdc++

在預設環境下這樣編譯會出現錯誤訊息, 爬了 google 說要另外安裝兩個套件

$ sudo apt-get install gcc-4.*-multilib
$ sudo apt-get install g++-multilib

然後再編譯一次就 OK 了

$ ls -l
total 20
-rwxr-xr-x 1 cpp cpp 8532 2011-03-10 13:41 cpp01
-rw-r--r-- 1 cpp cpp   71 2011-03-10 13:00 cpp-01.cc

$ file cpp01
cpp01: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

$ ./cpp01
bash: ./cpp01: cannot execute binary file
$

用 file 查看一下, 確實顯示 cpp01 是 x64 執行檔
而且在現在的 ubuntu 10.04 x86 也不能執行
將 cpp01 複製到我正在用的 host 環境..

$ scp cpp01 xxxxx@192.168.1.8:~/.
xxxxx@192.168.1.8's password:

$ ls cpp01 -l
-rwxr-xr-x 1 xxxxx xxxxx 8532 2011-03-10 13:42 cpp01
xxxxx@uYmk:~$ ./cpp01
Hi~~

host 環境是 ubuntu 10.04 x64 版, 可以正確執行  :D  :D