我需要帮助:使用file1.h通过全局变量将file2.c中的整数值传递给file3.c
您好,我遇到一个问题,使用全局变量来识别我在密文文本项目中使用的其中一个端口。它非常大,所以我刚刚添加了解决我的问题的代码片段。
我目前用于编译的内容:gcc -o executable3 file2.c file1.h(可行)
和我的第二行(不起作用):gcc -o executable3 file3.c
编译时出现错误消息:对“GLOBALVARIABLE”的未定义引用 collect2:ld返回1退出状态
我的file1.h文件:
ifndef FILE1_H
define FILE1_H
include <stdio.h>
include <stdlib.h>
extern int *GLOBALVARIABLE;
endif
我初始化GLOBALVARIABLE值并将其设置为等于端口号(文件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 :(得分: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
应该只存在一次。您希望以其他方式执行哪一项?
这里有两个想法:
.h
)放在编译器命令行上。它们包含在需要的源文件中。extern
无法实现。 &#34;全局变量&#34;仅存在于一个进程的范围内。如果您想在流程之间共享数据,例如共享内存,管道等(谷歌为他们)。