Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
main.c无法读取我在.h文件中声明并在另一个.c文件(在c中)中定义的函数_C_Codeblocks_Linker Errors - Fatal编程技术网

main.c无法读取我在.h文件中声明并在另一个.c文件(在c中)中定义的函数

main.c无法读取我在.h文件中声明并在另一个.c文件(在c中)中定义的函数,c,codeblocks,linker-errors,C,Codeblocks,Linker Errors,最近,我试图了解extern的用法,并用c创建自己的头文件。我写了一个简单的程序,交换数字的值并显示它们。当然,我知道我可以用一种更简单的方式来做,但是我的代码有这个问题。我在同一个项目中写了main.c,header.c,header.h 梅因:是吗 #include <stdio.h> #include <stdlib.h> #include "header.h" int x,y; int main() { x = 3; y = 4; swa

最近,我试图了解extern的用法,并用c创建自己的头文件。我写了一个简单的程序,交换数字的值并显示它们。当然,我知道我可以用一种更简单的方式来做,但是我的代码有这个问题。我在同一个项目中写了main.c,header.c,header.h

梅因:是吗

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

   int x,y;
  int main()
   {

 x = 3;
 y = 4;
 swap();
 show(x,y);
 return 0;


 }
头文件是:

        #ifndef HEADER_H_INCLUDED
        #define HEADER_H_INCLUDED
        #include <stdio.h>
        extern int x,y;
        extern void swap(void);
        extern void show(int,int y);

        #endif // HEADER_H_INCLUDED
#如果包含NDEF标题#
#定义包含的标题
#包括
外部内部x,y;
外部无效掉期(作废);
外部无效显示(int,int y);
#endif//包括页眉
我在主函数中遇到了这个错误:
“对“交换”的未定义引用” “对“show”的未定义引用”

我应该怎么做来修复代码或者我的错误在哪里

我在等你的回答

pi@raspberrypi:~/Downloads $ gcc main.c  
/tmp/ccmKPwcW.o : in the function « main » :
main.c:(.text+0x20) : undefined reference to « swap »
main.c:(.text+0x3c) : undefined reference to « show »
collect2: error: ld returned 1 exit status
但是

你错过了与标题的链接。o

当然可以通过

pi@raspberrypi:~/Downloads $ gcc -c main.c 
pi@raspberrypi:~/Downloads $ gcc -c header.c 
pi@raspberrypi:~/Downloads $ gcc main.o
main.o : Ine the function « main » :
main.c:(.text+0x20) : undefined reference to « swap »
main.c:(.text+0x3c) : undefined reference to « show »
collect2: error: ld returned 1 exit status

在OP的备注后编辑

--------------编译:在Deneme中调试(编译器:GNU GCC编译器)------mingw32-g++.exe-o bin\Debug\trial.exe obj\Debug\main.o obj\Debug\main.o:在函数main'中:

C:/Users/bb/Documents/trial/main.C:11:未定义对掉期的引用'

C:/Users/bb/Documents/trial/main.C:12:未定义对“show”的引用

collect2.exe:错误:ld返回1个退出状态进程终止,状态为1(0分钟,0秒))3个错误,0个警告(0分钟,0秒))

正如您在
mingw32-g++.exe-o bin\Debug\trial.exe obj\Debug\main.o obj\Debug\main.o
中所看到的那样,由于链接了两次main.o,因此无法链接到header.o

必须是
mingw32-g++.exe-o bin\Debug\trial.exe obj\Debug\main.o obj\Debug\header.o

附加说明:header.*是一个非常奇怪的名称,表示两个文件,其中一个不是头文件

但是

你错过了与标题的链接。o

当然可以通过

pi@raspberrypi:~/Downloads $ gcc -c main.c 
pi@raspberrypi:~/Downloads $ gcc -c header.c 
pi@raspberrypi:~/Downloads $ gcc main.o
main.o : Ine the function « main » :
main.c:(.text+0x20) : undefined reference to « swap »
main.c:(.text+0x3c) : undefined reference to « show »
collect2: error: ld returned 1 exit status

在OP的备注后编辑

--------------编译:在Deneme中调试(编译器:GNU GCC编译器)------mingw32-g++.exe-o bin\Debug\trial.exe obj\Debug\main.o obj\Debug\main.o:在函数main'中:

C:/Users/bb/Documents/trial/main.C:11:未定义对掉期的引用'

C:/Users/bb/Documents/trial/main.C:12:未定义对“show”的引用

collect2.exe:错误:ld返回1个退出状态进程终止,状态为1(0分钟,0秒))3个错误,0个警告(0分钟,0秒))

正如您在
mingw32-g++.exe-o bin\Debug\trial.exe obj\Debug\main.o obj\Debug\main.o
中所看到的那样,由于链接了两次main.o,因此无法链接到header.o

必须是
mingw32-g++.exe-o bin\Debug\trial.exe obj\Debug\main.o obj\Debug\header.o


附加说明:header.*是一个非常奇怪的名称,用于表示两个文件,其中一个不是头文件

您不能同时使用两个源文件进行生成。@某个程序员,您可以编写更具体的名称吗?如何生成?使用IDE?直接在命令行上?请告诉我们,如果您在命令行上构建,请向我们显示您使用的命令。如果您使用的是IDE,那么IDE中的项目树中列出了哪些文件?您是执行
gcc main.c header.c
还是只执行
gcc main.c
?(无论是gcc还是其他编译器)您的问题在于构建系统。我编辑了标签以澄清这一点(如果您认为我搞错了,请随意重新编辑/回滚)。我不知道代码块构建系统,但你必须让它明白你的项目中有几个源文件,这样在创建可执行文件时它可以将它们链接在一起。你不能同时使用两个源文件进行构建。@某个程序员,你能写得更具体些吗?你是如何构建的?使用IDE?直接在命令行上?请告诉我们,如果您在命令行上构建,请向我们显示您使用的命令。如果您使用的是IDE,那么IDE中的项目树中列出了哪些文件?您是执行
gcc main.c header.c
还是只执行
gcc main.c
?(无论是gcc还是其他编译器)您的问题在于构建系统。我编辑了标签以澄清这一点(如果您认为我搞错了,请随意重新编辑/回滚)。我不知道代码块构建系统,但你必须让它明白你的项目中有几个源文件,这样在创建可执行文件时它可以将它们链接在一起。最好演示一下
gcc main.o header.o
。。。还有可能提到
header.c
是一个糟糕的名字。@williampersell是的,使用header.c太奇怪了是的,对这个名字很抱歉:),但是我怎么才能把它改对呢?我刚刚在project中创建了标题为什么会这样?@BBprog主要的问题不是名称,而是我在回答中说的您与main链接了两次。我从未使用过代码块,看看你是如何向编译器指示文件的/link@BBprog您是否输入了文件列表或代码块在所有文件上自动工作?最好演示一下
gcc main.o header.o
。。。还有可能提到
header.c
是一个糟糕的名字。@williampersell是的,使用header.c太奇怪了是的,对这个名字很抱歉:),但是我怎么才能把它改对呢?我刚刚在project中创建了标题为什么会这样?@BBprog主要的问题不是名称,而是我在回答中说的您与main链接了两次。我从未使用过代码块,看看你是如何向编译器指示文件的/link@BBprog您是否输入了文件列表或代码块在所有文件上自动工作?
pi@raspberrypi:~/Downloads $ gcc -c main.c 
pi@raspberrypi:~/Downloads $ gcc -c header.c 
pi@raspberrypi:~/Downloads $ gcc main.o
main.o : Ine the function « main » :
main.c:(.text+0x20) : undefined reference to « swap »
main.c:(.text+0x3c) : undefined reference to « show »
collect2: error: ld returned 1 exit status