ubuntu x86-64位機器下編譯32位彙編的問題
示例程式碼:
# movtest3.s
.section .data
output:
.asciz "The value is %d\n"
values:
.int 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60
.section .text
.globl _start
_start:
nop
movl $0, %edi
loop:
movl values(, %edi, 4), %eax
pushl %eax
pushl $output
call printf
addl $8, %esp
inc %edi
cmpl $11, %edi
jne loop
movl $0, %ebx
movl $1, %eax
int $0x80
彙編:as --32 movtest3.s -o movtest3.o
連結:ld -o movtest3 movtest3.o -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -L/lib/i386-linux-gnu -lc
當中可能會碰到的幾個問題:
如果提示"invalid instruction suffix for `push'",是因為彙編時沒有用--32來指定按32位來編譯;
如果不加-m elf_i386指定基於32位平臺連結,會報錯:ld: i386 架構於輸入檔案 movtest3.o 與 i386:x86-64 輸出不相容;
如果提示"對‘printf’未定義的引用",是因為連結時沒有指定C庫;
如果提示"ld: 找不到 -lc",則可能是C庫路徑不對或軟連結問題,先通過locate libc.so查詢本機c庫的路徑,比如我的電腦查詢結果如下:
/lib/i386-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libc.so.6
/usr/lib/x86_64-linux-gnu/libc.so
一般通過路徑名就能區分32位和64位,如果想進一步確認,可以通過file命令檢視.
$ file /lib/i386-linux-gnu/libc.so.6
/lib/i386-linux-gnu/libc.so.6: symbolic link to libc-2.23.so // libc.so.6是一個軟連結
$ file /lib/i386-linux-gnu/libc-2.23.so
/lib/i386-linux-gnu/libc-2.23.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux.so.2, BuildID[sha1]=dd5192a769e33ed6ca68a6ab5740ff9e8ec678a7, for GNU/Linux 2.6.32, stripped
我的電腦沒有libc.so這個軟連結,在/lib/i386-linux-gnu/目錄下,執行sudo ln -sf libc.so.6 libc.so,再次連結,通過.
相關文章
- linux(ubuntu)下的64位編譯器編譯32位程式LinuxUbuntu編譯
- 編譯器如何生成彙編編譯
- ubuntu下編譯交叉編譯工具鏈Ubuntu編譯
- 淺談彙編器、編譯器和直譯器編譯
- WebAssembly 系列(三)編譯器如何生成彙編Web編譯
- ubuntu下 編譯安裝swftoolsUbuntu編譯
- SPI編譯問題編譯
- perl 編譯問題!編譯
- jive編譯問題編譯
- Ubuntu 18.04(虛擬機器)環境下編譯Android 原始碼Ubuntu虛擬機編譯Android原始碼
- VLC在ubuntu環境下編譯編譯
- Python 的編譯器geany-1.36無法下載問題Python編譯
- Linux下C語言編譯的問題LinuxC語言編譯
- 【FFmpeg】Windows下64位ffmpeg編譯Windows編譯
- libmemcached編譯問題IBM編譯
- EBS form編譯問題ORM編譯
- dos下編譯執行java程式遇到的問題編譯Java
- vmware ubuntu虛擬機器問題彙總解決Ubuntu虛擬機
- Ubuntu中 MySQL 的中文編碼問題UbuntuMySql
- GCC編譯過程(預處理->編譯->彙編->連結)GC編譯
- PyTorch在64位Windows下的編譯PyTorchWindows編譯
- 編譯器的編譯基本過程編譯
- go的編譯優化問題Go編譯優化
- nginx 編譯出現的問題Nginx編譯
- 關於TIJ的編譯問題編譯
- jivejdon3編譯的問題編譯
- Ubuntu上的pycrypto給出了編譯器錯誤Ubuntu編譯
- Ubuntu14下Hadoop開發 編譯64位Hadoop2.4UbuntuHadoop編譯
- 雲伺服器Ubuntu下搭建NDK環境,並編譯FFmpeg伺服器Ubuntu編譯
- gcc 編譯器與 clang 編譯器GC編譯
- CUDA常見編譯器配置問題一覽編譯
- Architecture 1001: x86-64 Assembly 彙編
- Kaldi在ubuntu 18.04下編譯小結Ubuntu編譯
- Python Extension 編譯問題Python編譯
- 請教javac 編譯問題Java編譯
- cmake編譯問題解決編譯
- Myeclipse不能編譯問題Eclipse編譯
- 配置pycharm 編譯器時遇到的一些問題PyCharm編譯