gpt4 book ai didi

c - 如何链接两个目标文件

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:11 25 4
gpt4 key购买 nike

我有 rfact.s 和 rfactmain.c

rfact.s:

    .text
.p2align 4
.global rfact
.type rfact, @function

rfact:
pushl %ebp
movl %esp, %ebp
pushl %ebx
subl $4, %esp
movl 8(%ebp), %ebx
movl $1, %eax
cmpl $1, %ebx
jle .L53

leal -1(%ebx), %eax
movl %eax, (%esp)
call rfact
imull %ebx, %eax


.L53:
addl $4, %esp
popl %ebx
popl %ebp
ret

rfactmain.c:

int main(){
int x = rfact(4);
return 0;
}

我在 64 位系统上。所以首先我通过做得到两个目标文件

gcc -m32 -c rfact.s
gcc -m32 -c rfactmain.c

然后我尝试像这样将它们链接在一起

gcc -m32 -o rf rfact.o rfactmain.o

但是我得到一个错误

gcc -m32 -o rf rfact.o rfactmain.o
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.8.2/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: skipping incompatible /usr/lib64/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib64/libc.a when searching for -lc
/usr/bin/ld: cannot find -lc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.8.2/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find crtn.o: No such file or directory
collect2: error: ld returned 1 exit status

如果我删除 -m32 我会得到错误(这是预期的,因为两个目标文件都是 32 位的)

gcc -o rf rfact.o rfactmain.o
/usr/bin/ld: i386 architecture of input file `rfact.o' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `rfactmain.o' is incompatible with i386:x86-64 output
collect2: error: ld returned 1 exit status

最佳答案

您没有安装 32 位支持的东西。您可能需要单独的 gcc-multilib 包或 32 位库包。请查阅您的发行版文档和/或包管理器。

关于c - 如何链接两个目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21837772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com