我正在尝试编译并链接一个简单的“你好,世界!” GCC计划。该程序使用“printf”C函数。我遇到的问题是终端会抛出多个错误。我正在运行Archlinux,与NASM一起编译,与GCC连接。这是我的代码:
; ----------------------------------------------------------------------------
; helloworld.asm
;
; Compile: nasm -f elf32 helloworld.asm
; Link: gcc helloworld.o
; ----------------------------------------------------------------------------
SECTION .data
message db "Hello, World",0
SECTION .text
global main
extern printf
section .text
_main:
push message
call printf
add esp, 4
ret
我收到的错误如下:
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.2/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
collect2: error: ld returned 1 exit status
有人可以告诉我导致这些错误的原因以及我需要做些什么来修复它们?
提前致谢,
RileyH
答案 0 :(得分:0)
对于这些事情,您应该首先了解gcc
到底在做什么。所以使用
gcc -v helloworld.o -o helloworld
并且发生的事情是你有一个64位Linux并在其中链接一个32位对象。所以试试
gcc -m32 -v helloworld.o -o helloworld
但我认为你应该避免今天编写程序集(优化编译器做的工作比你合理做的更好)。如果您绝对需要一些汇编指令,请在C代码中添加一些asm
。
BTW,您可以使用gcc -fverbose-asm -O -wall -S helloworld.c
进行编译,并查看生成的helloworld.s
;您还可以将.s
个文件传递给gcc