2017-06-05 126 views
-1

我需要什么帮助:传递一个整数值,是在file2.c中使用file1.h通过全局变量来file3.c中如何实现一个全局变量?

你好,我使用了一个全局变量有一个问题,以确定的一个我在密文文本项目上使用的端口。它非常大,所以我刚刚添加了解决我的问题的代码片段。

我目前使用的编译内容:gcc的-o executable3 file2.c中file1.h(这工作)

和我的第二线(不工作):gcc的-o executable3 file3.c中

编译时我的错误消息:未定义的引用`全局变量” collect2:LD返回1个退出状态

我file1.h文件:

ifndef FILE1_H 
define FILE1_H 
include <stdio.h> 
include <stdlib.h> 
extern int *GLOBALVARIABLE; 
endif 

我的文件,我初始化全局变量值,将其设置为端口号(文件2):使编译冲突上述

#include "file1.h" 
#define SIZE 128000 
int *GLOBALVARIABLE; 
int main(int argc, char *argv[]) 
{ 
int sockfd, newsockfd, portno; 

portno = atoi(argv[1]); 
GLOBALVARIABLE = &portno; 

文件(文件3):

#include "file1.h" 
#define SIZE 16000 
int main(int argc, char *argv[]) 
{ 
int sockfd, portno; 
portno = atoi(argv[3]); 
if (portno == *GLOBALVARIABLE){ 
printf("Theres been a port error, you are using the wrong port for this 
command"); 
exit(1); 

请帮助! 谢谢!

+0

您在file2和file3中有两个主要函数(),它意味着它会创建两个可执行文件?是不是你只想要一个可执行文件? – LethalProgrammer

回答

1

您正在以错误的方式使用您的编译器。默认情况下,gcc会发出可运行的二进制文件,这意味着它已经执行了链接步骤。链接时,必须定义所有符号(除了从共享对象导入的符号)。

,你所要做的就是只编译源文件(选件-c)到目标文件,然后链接这些目标文件一起:

gcc -c -ofile2.o file2.c    # <- compile 
gcc -c -ofile3.o file3.c    # <- compile 
gcc -oexecutable file2.o file3.o  # <- link 

在实践中,添加标记使警告,艇员选拔一个C标准等

编辑:正如在评论中指出,main应该只存在一次。你希望哪一个被执行呢?


两个更多的心思在这里:

  1. 你的编译器的命令行不要把头文件(.h)。它们被包含在需要的源文件中。
  2. 如果您想要在两个独立程序之间共享一个变量,则不能使用extern。 “全局变量”只存在于一个过程的范围内。如果你想在进程间共享数据, 共享内存,管道等(谷歌为他们)。