首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ld:重复符号

ld:重复符号
EN

Stack Overflow用户
提问于 2012-02-16 03:10:45
回答 2查看 16.2K关注 0票数 5

我有rand.cpp和rand.hpp文件,还有rand_unif()函数。我已经在sim_engine.hpp文件中包含了rand.hpp文件。

在main.cpp文件中,我已经包含了sim_engine.hpp文件。如果我运行makefile,我会得到这个错误

代码语言:javascript
复制
ld: duplicate symbol rand_unif()    in sim_engine.o and main.o for architecture x86_64
collect2: ld returned 1 exit status

sim_engine.hpp是唯一包含rand.hpp的地方。main.cpp不包括rand.hpp,但包括sim_engine.hpp。

我不明白为什么会出现重复符号错误。

代码语言:javascript
复制
#mod_simu.make project makefile

mod_simu : main.o rand.o graph.o street.o isection.o vehicle.o event.o FEL.o sim_engine.o clock.o
    g++ -o mod_simu main.o rand.o graph.o street.o isection.o vehicle.o event.o FEL.o sim_engine.o clock.o

main.o : main.cpp   
    g++ -c main.cpp

rand.o : rand.cpp
    g++ -c rand.cpp

graph.o : graph.cpp graph.hpp street.hpp isection.hpp
    g++ -c graph.cpp

street.o : street.cpp street.hpp
    g++ -c street.cpp

isection.o : isection.cpp isection.hpp street.hpp
    g++ -c isection.cpp

vehicle.o : vehicle.cpp vehicle.hpp
    g++ -c vehicle.cpp

event.o : event.cpp event.hpp
    g++ -c event.cpp

FEL.o : FEL.cpp FEL.hpp
    g++ -c FEL.cpp

sim_engine.o : sim_engine.cpp sim_engine.hpp
    g++ -c sim_engine.cpp

clock.o : clock.cpp clock.hpp
    g++ -c clock.cpp
clean:
    rm *.o mod_simu

#end

这是我拥有的makefile。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-16 03:25:27

显然,您已经在程序中多次定义了rand_unif。您可能只在文本代码中定义它一次,但是通过头包含,该代码被编译成多个.o文件。

您可能在rand.hpp中定义了rand_unif。包含的头文件包含在sim_engine.hpp中,因此任何包含sim_engine.hpp的.cpp文件都将自动获得rand_unif的副本。显然,main.cpp和sim_engine.cpp都包含sim_engine.hpp,因此这两个.o文件都会获得该函数的副本。C++禁止对同一函数有多个定义,但它不要求强制执行该要求。(它被称为单一定义规则。)链接器抓到你了。

有两种典型的解决方案来解决这个问题:

  • 将函数的定义移动到一个.cpp文件中;rand.cpp似乎是一个很好的候选者。确保rand.hpp只包含声明,而不是要内联的头文件中的定义的definition.
  • Change。C++对内联函数的单一定义规则做了一个例外。在rand.hpp中的声明前添加inline
票数 12
EN

Stack Overflow用户

发布于 2012-02-16 03:17:41

我的猜测是,您在代码中的某个地方包含了两次函数声明。您可能希望尝试使用以下代码包装"rand.hpp“的所有包含内容:

ifndef#

RAND_HPP

#定义RAND_HPP

#include {文件路径}

#endif

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9299676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档