重复符号错误 - 全局变量

Dre*_*rew 2 c linker linker-errors

所以我有三个文件:

jarvismarch.c
jarvismarchtools.c
jarvismarchtools.h
Run Code Online (Sandbox Code Playgroud)

运行后make,我收到以下错误:

Andrew-Carpenters-Laptop:Independent Study ahcarpenter$ make
cc    -c -o jarvismarch.o jarvismarch.c
cc    -c -o jarvismarchtools.o jarvismarchtools.c
cc -o jarvismarch jarvismarch.o jarvismarchtools.o
ld: duplicate symbol _string1 in jarvismarchtools.o and jarvismarch.o for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [all] Error 1
Run Code Online (Sandbox Code Playgroud)

string 1在...内宣布jarvismarchtools.c.jarvismarchtools.h包括在内jarvismarchtools.c以及jarvismarch.c.

关于如何解决此错误的任何想法?

jarvismarchtools.h:

/*
    FILENAME: jarvismarchtools.h
    AUTHOR: Andrew H. Carpenter
    DATE: 2 Feb 2013
    DESCRIPTION: This is a header file containing tools for running Jarvis' March.
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

extern int string1 = 1;

typedef struct Point {
    double x, y;
    char *label;
} point;

/*
    DESCRIPTION: A function that determines the angle (in degrees) between two points.
    INPUT: Requires two points as input.
Run Code Online (Sandbox Code Playgroud)

jarvismarchtools.c:

/*
    FILENAME: jarvismarchtools.c
    AUTHOR: Andrew H. Carpenter
    DATE: 2 Feb 2013
    DESCRIPTION: This is an implemenetation file containing tools for running Jarvis' March.
*/
#include "jarvismarchtools.h"

int string1 = 1;

float getAngle(point p1, point p2){
Run Code Online (Sandbox Code Playgroud)

cni*_*tar 6

如果应该共享变量:

  • 让它extern在头
  • 在没有的C文件中定义它 extern

如果不应该共享变量,请static在前面添加一个.