64,639
社区成员
发帖
与我相关
我的任务
分享
#ifndef PEOPLE_H
#define PEOPLE_H
#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <iostream>
int a = 0; //这里只是多定义了一个变量.
class people
{
private:
char name[20];
int age;
public:
void set_name(char *s);
void set_age(int i);
const char * get_name();
const int get_age();
};
#endif
/* file1.c */
#include "header.h"
/* file2.c */
#include "header.h"
/* main.c */
#include <stdio.h>
#include "header.h"
int main(void)
{
printf("a=%d\n", a);
return 0;
}
/* header.h */
#ifndef HEADER_H
#define HEADER_H
int a = 0;
#endif
$ nm file1.o file2.o main.o
file1.o:
0000000000000000 B a
file2.o:
0000000000000000 B a
main.o:
0000000000000000 B a
0000000000000000 T main
U printf
$ gcc -o demo file1.o file2.o main.o
file2.o:(.bss+0x0): multiple definition of `a'
file1.o:(.bss+0x0): first defined here
main.o:(.bss+0x0): multiple definition of `a'
file1.o:(.bss+0x0): first defined here
collect2: ld 返回 1
正确的方法是,在header.h里声明变量,在一个单独的global.c文件里定义变量。
/* file1.c */
#include "header.h"
/* file2.c */
#include "header.h"
/* main.c */
#include <stdio.h>
#include "header.h"
int main(void)
{
printf("a=%d\n", a);
return 0;
}
/* header.h */
#ifndef HEADER_H
#define HEADER_H
extern int a;
#endif
/* global.c */
int a = 0;
$ gcc -c file1.c file2.c main.c global.c
$ nm file1.o file2.o main.o global.o
file1.o:
file2.o:
main.o:
U a
0000000000000000 T main
U printf
global.o:
0000000000000000 B a