Make - 编译C ++项目时出现多个定义错误

时间:2017-05-04 12:00:06

标签: c++ c++11 makefile compiler-errors extern

我有一个问题,是的 我承认在 之前已经提出过这样的问题,但是他们都没有真正帮助我,因为背景和错误的种类给出的不完全一样。

我有一个项目,我正在尝试使用makefile进行编译。编译过程如下:

game_f.exe : objects/game_f.o objects/game_f_main.o archives/io.a
    @g++ $^ $(ALL_OTHER_NEEDED_LIBS) -o $@ -std=c++11 -pedantic -Wall -g

现在这些行正在创建“多个定义”错误。如:

io.cpp:(.text+0x1FDA) : multiple definitions of <some function or variable name> :
archives/io.a(io.o):io.cpp:(.text+0x1FDA) : defined for the first time here

现在这来自我创建命名空间的头文件。命名空间是这样创建的:

io.h

namespace io {
    extern int TermWidth;
    [some other variables, declared with "extern <some type> name;"]
    extern void getTermWidth();
    [some other functions, declared with "extern <some type> name(args)"
}

io.cpp

namespace io {
    TermWidth = 0;
    [other variables definitions]
    void getTermWidth() { ... }
}

编译时,编译器似乎忽略了extern字。但奇怪的是 如果我键入整个g ++行,而不通过makefile ,编译就可以了。

顺便说一句,这在我的macOS机器上进行编译时顺便说一下,甚至更奇怪。

g ++是否有extern定义的特殊选项?这是g++make的已知问题吗?我怎么能避免这个错误?

编辑:是的,.h文件包含警卫。

0 个答案:

没有答案