gnu ld 在带有外部 hpp header 的程序中说未定义对 `xxx(arg1, arg2)' 的引用

gnu ld says undefined reference to `xxx(arg1, arg2)' in program with external hpp header

为了让我的内核源代码更小,我把它分成了多个 header。

(重要的是,它们是 hpp headers,而不是 h headers。所以 extern "C" {#include } 没有做任何事情。)

链接时,gnu ld 显示“对 `xxx(arg1, arg2)' 的未定义引用”

(函数“xxx(arg1, arg2)”在header)

如何修复?

您的描述似乎表明您没有使用 extern "C" { }; 编译 .cc 文件 - 是吗尝试重新编译? 您可以尝试添加前缀 extern "C" void xxx(int arg1, int arg2); 在你的头文件中。 如果这不起作用,请在您的源文件中进行相同的操作: extern "C" void xxx(int arg1, int arg2) { / 代码 / }

C .o 文件链接不显示函数参数,仅显示名称 - 通常。 它可以更改,但据我所知,它就像我写的那样。