在 64 位机器上链接 32 位 NASM 文件的问题
Issue with Linking a 32-bit NASM file on a 64-bit machine
所以我正在学习 x86 NASM 汇编,并且正在编写我的第一个小程序。
NASM代码是
extern printf
segment .data
prompt1 db "Hello World!", 0 ; Null-terminated
segment .text
global main
main:
pushad
push dword prompt1
call printf
add esp, 4
popad
ret
然后我执行 nasm -f elf32 HelloWorld.asm
,这会创建一个 HelloWorld.o 文件。然后我做 gcc -m32 HelloWorld.o -o HelloWorld
.
这returns一个错误:
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2:错误:ld 返回了 1 个退出状态
-m32
和 elf32
的使用是根据其他各种 Whosebug 线程的建议。我试过安装像 i386 GCC 和 G++ 库这样的东西(它解决了架构错误的问题)。
正如标题所说,这是 32 位程序集,但我的笔记本电脑是 64 位的。
提前致谢。
我通过安装 libgcc32-4.8-dev 解决了这个问题。我已经安装了 gcc-multilib,所以也许两者的结合就是我所需要的。
所以我正在学习 x86 NASM 汇编,并且正在编写我的第一个小程序。
NASM代码是
extern printf
segment .data
prompt1 db "Hello World!", 0 ; Null-terminated
segment .text
global main
main:
pushad
push dword prompt1
call printf
add esp, 4
popad
ret
然后我执行 nasm -f elf32 HelloWorld.asm
,这会创建一个 HelloWorld.o 文件。然后我做 gcc -m32 HelloWorld.o -o HelloWorld
.
这returns一个错误:
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2:错误:ld 返回了 1 个退出状态
-m32
和 elf32
的使用是根据其他各种 Whosebug 线程的建议。我试过安装像 i386 GCC 和 G++ 库这样的东西(它解决了架构错误的问题)。
正如标题所说,这是 32 位程序集,但我的笔记本电脑是 64 位的。
提前致谢。
我通过安装 libgcc32-4.8-dev 解决了这个问题。我已经安装了 gcc-multilib,所以也许两者的结合就是我所需要的。