最近作者正在看nasm,某個assembly 的實作,因為作業系統都升到64 bits了,要編譯asm code需要一些額外處理,以下記錄一下處理步驟,我是用archlinux,不過我想其他作業系統應該也差不多:
首先作者有提供asm_io.asm,這要先編譯,先安裝作者的nasm組譯器:
sudo pacman -S nasm
組譯:
nasm -f elf -d ELF_TYPE asm_io.asm
nasm -f elf first.asm
這裡的first 是我們自己寫的asm code
下一步要用gcc,原本書中是建議
gcc -o first driver.c first.o asm_io.o
不過方才都是用elf32去組譯的,所以要改成:
gcc -m32 -lc -o first driver.c first.o asm_io.o
這裡要安裝:
sudo pacman -S gcc-multilib gcc-libs-multilib
然後我還遇到找不到shared library libisl的問題,可能是gcc-multilib跟不上isl的更新,這個用symbolic link到libisl.13.0.0的方式解決
之後就可以完成編譯了,不過也許學著寫64 bits的assembly比較治本?