【发布时间】:2012-03-21 17:42:35
【问题描述】:
(在 64 位 Windows 7 上运行 MingW,在 Kubuntu 上运行 GCC)
这可能只是一个 MingW 问题,但它在至少一个 Kubuntu 安装上也失败了,所以我很怀疑。
我有一个简短的 C 程序,它应该调用一个汇编函数。我使用 nasm 编译汇编器,使用 MingW 的 gcc 实现编译 c 程序。两者通过 makefile 链接在一起 - bog-simple。然而,链接在声称外部函数是“未定义引用”的声明上失败了
makefile 的相关部分:
assign0: ass0.o main.o
gcc -v -m32 -g -Wall -o assign0 ass0.o main.o
main.o: main.c
gcc -g -c -Wall -m32 -o main.o main.c
ass0.o: ass0.s
nasm -g -f elf -w+all -o ass0.o ass0.s
汇编文件的开头:
section .data ; data section, read-write
an: DD 0 ; this is a temporary var
section .text ; our code is always in the .text section
global do_str ; makes the function appear in global scope
extern printf
do_str: ; functions are defined as labels
[Just Code]
还有c文件的声明:
extern int do_str(char* a);
这至少在一个 Kubuntu 安装上有效,在另一个上失败,在 MingW 上失败。有人有想法吗?
【问题讨论】:
-
有时
_会被添加到符号名称之前。您收到的确切错误消息是什么? -
你试过在链接器命令行上交换 {ass0.o main.o} 吗?
-
@wildplasser,为什么会有不同?
-
您想在程序集端添加
_,而不是 C 端,如果这实际上是问题所在。不能有与源代码行相关的“未定义引用”错误 - 这是一个链接错误。请在此处复制并粘贴全文。