这是我第一次在这里发布信息,因为我通常可以通过其他问题找到答案,但是像我的问题一样,其他所有解决方案都无效。

我在Eclipse Mars中使用MinGW GCC

C代码

#include <stdio.h>
#include <stdlib.h>


extern int logicShift(int);
void program1();

int main(void)
{
    program1();

    return 0;
}

void program1()
{
    int num = 0;
    int disp;
    while (num >= 0)
    {
        num += 2;
        disp = logicShift(num); // this is the error right here
        printf ("%d", disp);
    }
}


错误:undefined reference to logic shift

assembly.s文件:

.global logicShift

logicShift:
    push    %ebp
    movl    %esp, %ebp

    movl 8(%ebp), %edx
    shll $1, %edx

    movl    %edx, %eax
    pop     %ebp
    ret


这是简单的组装。这些功能没有_前缀。我现在正在拔头发,请寻求帮助。
谢谢。

最佳答案

这可能是因为您没有通过在编译命令中不包括汇编代码的目标文件/源文件来正确地编译它们。

假设您在main.c中具有C源代码,在logicshift.S中具有汇编源代码,那么您可以对其进行编译以生成一个名为main的可执行文件,如下所示:

gcc main.c logicshift.S -o main

09-06 19:08