无法编译x86_64 .s和.c文件:未定义对函数[重复]的引用。

问题描述 投票:0回答:1

我的问题是这样的,我试图创建一个汇编函数库,并在C程序中使用它。我遇到了一个未定义的引用错误,我在学校提供的vm上使用xubuntu(所以我想一切都设置好了......)。

我在学校为这个项目提供的vm上使用xubuntu(所以我想一切都设置好了......)。

汇编文件 (ft_function.s)

section .text
    global _ft_function

_ft_function:
    mov rax, 42
    ret

C文件(main.c)

extern int ft_function(char const *str);

int main()
{
    return (ft_function("abc"));
}

现在,由于问题持续存在,我不创建库,以减少一切最简单的情况下,所以我生成的对象文件,然后用clang链接它们。

nasm -f elf64 ft_function.s -o ft_function.o
clang -c main.c

clang ft_function.o main.o

main.o: In function `main':
main.c:(.text+0x1a): undefined reference to `ft_function'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

谢谢你的帮助 !!!!Cheers !

compiler-errors clang x86-64
1个回答
1
投票
section .text
    global _ft_function

_ft_function:
    mov rax, 42
    ret

省略前面的下划线。 其他一些系统使用以下划线开头的符号名,但Linux不使用。 就这样做。

section .text
    global ft_function

ft_function:
    mov rax, 42
    ret
© www.soinside.com 2019 - 2024. All rights reserved.