我刚刚用头组织了我的代码,但正如我已经这样做了,我得到了一个警告链接时变成一个错误。

我有一个代码(使用一个函数,它是一个集管内的)在该test.c是这样的:

#include "test1.h"

/* Some code */
main()
{
   Testing();
}

和我的test1.h报头是这样的:

void Testing();
void print(int, int, int, const char*);

和在test1.c

void Testing()
{
   print(0xF9, 27, 5, "\xC9\\xBB");
}

void print(int colour, int x, int y, const char *string)
{
   volatile char *video=(volatile char*)0xB8000 + y*160 + x*2;
   while(*string != 0)
   {
      *video=*string;
      string++;
      video++;
      *video=colour;
      video++;
   }
}

当我试图编译代码,我得到这样的:

  

Ubuntu的@ EeePC的:〜/开发/测试$ gcc的-o test.o -c test.c的-Wall -Wextra -nostdlib -nostartfiles -nodefaultlibs结果   test.c的:在函数“主”:结果   test.c以11:警告:隐函数声明“测试”结果   Ubuntu的@ EeePC的:〜/开发/测试$

当时它只是一个简单的警告,但是当我尝试链接吧...

  

Ubuntu的@ EeePC的:〜/开发/测试$ ld个-T linker.ld -o kernel.bin loader.o test.o结果   test.o:在功能main':
test.c:(.text+0xfc): undefined reference to
Testing'

我需要做什么?

有帮助吗?

解决方案

编辑:以反映OP的问题,我已经打了我的答案有些线路虽然是upvoted ...

<击>为什么kernel.c在编译器中标记了,即使你没有在这里提到的?我思念的东西...

<击>
gcc -o test.o -c test.c -Wall -Wextra -nostdlib -nostartfiles -nodefaultlibs
kernel.c: In function ‘main’:
kernel.c:11: warning: implicit declaration of function ‘Testing’
ubuntu@eeepc:~/Development/Test$

<击>

也许你需要做的是在你的头文件中这样的地方,因为我判断你想要内核使用此功能:

extern void Testing();

和,拿出你所有的功能,并将它们放置在一个单独的.c文件,他们不应该在那里摆在首位...例如:

Testing.c
/* all your functions here */

Testing.h
/* Only global, external variables and function prototypes */

希望这有助于 最好的祝福, 汤姆。

其他提示

我无法重现你的问题。这按预期工作,当我尝试编译一个Ubuntu机器上的代码(根据你的贴,我假设你正在使用。)

您确定的#include正确回事?

尝试使用-E代替-c,看看整个代码编译器试图编译模样。

有些在这里瞎猜,因为我的C是有点生疏,但Ç让你把函数体中的头?我不记得它。尝试测试()和print()的定义移动到一个.c文件?你也可以尝试编译的C ++作为看看是否能解决它,如果你不需要做/想℃。

您包括test.hmain.c,而你的声明,根据你写的东西,都在test1.h。注意在名称中1

除此之外,正在编译test.c和链接test.o,而实际上你的文件的名称是test1.c。此外,请注意在名称中1

编辑:现在你编辑纳入main.c文件的名称。编辑后可以安全地断言,大部分你描述的症状不possble 与文件的最新版本。重新验证你在做什么,更新后的信息disgnostic和/或交真正的代码。

不过,你编译器和连接线指的是旧的文件名。

我唐诺导致此什么,但我现在只是有这个问题。 尝试删除.h文件,并把职能的声明上.c文件本身的顶部。

在这种情况下,删除该test1.h和放test1.c的函数的声明在test1.c。 并且包括在test.c的test1.c 你不会得到那个警告信息更多,也不以下链接错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top