【问题标题】:Duplicate Symbol Error - Global Variable重复符号错误 - 全局变量
【发布时间】:2013-02-07 23:36:38
【问题描述】:

所以我有三个文件:

jarvismarch.c
jarvismarchtools.c
jarvismarchtools.h

运行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

string 1jarvismarchtools.c 中声明。 jarvismarchtools.h 包含在 jarvismarchtools.cjarvismarch.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.

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){

【问题讨论】:

    标签: c linker linker-errors


    【解决方案1】:

    如果变量应该共享:

    • 在标题中设置extern
    • 在没有extern的C文件之一中定义它

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

    【讨论】:

    • 所以我进行了上述更改,但仍然收到上述错误。有什么想法吗?
    • @Drew 请发布修改后的代码和确切的错误消息。
    • 您可能还想补充一点,变量只能/应该在一个地方初始化。
    • +1 @Code-Guru - extern int string1 = 1 可能是错误的。
    • @Drew 您应该在标头中声明变量而不是对其进行初始化。您应该定义并初始化 .c 文件中的变量。
    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-28
    • 2021-03-11
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    相关资源
    最近更新 更多