如何解决linux下编译出现的multiple definition of错误

时间:2021-02-14 14:51:51

今天,在编译quagga的过程中出现了multiple definition of的错误。该错误表示不同文件对同一变量进行了重复定义。因此,可以从以下几个方面来排查这个问题:

1. 是否定义了重复变量:

直观来讲,如果在已经引用的global.h中定义了变量v,那么在本文件之中,就不能再定义一个都是全局的变量。模块编译时虽然能够通过,但在链接过程中就会发现有多个变量,因此报错。解决办法就是修改不必要的重名。

 

2.链接出错:

就是在链接的时候才报错。

这说明模块内的用法是正确的,但由于未能唯一标示同一变量,导致多次声明。

解决方法(1):在global.h中声明,其他所有引用的地方用extern来声明,该变量引用自外部文件;

解决方法(2):在global.h中将变量修改成static变量,那么全局就只会保存一份。