美文网首页
链接时多重定义怎么办?

链接时多重定义怎么办?

作者: 罗蓁蓁 | 来源:发表于2020-08-03 17:31 被阅读0次

    链接时多重定义怎么办?一般解决方案是:只保留一个定义的地方就好了,这对强迫症,很友好!但往往有时又嫌麻烦,或者杂七杂八的的原因导致了,两个定义都保留,但只让链接时,只链接第一个遇到的定义函数!

    其实吧,如果这多重定义的函数是存在于不同的库,一般默认都只会找第一个遇到的库里面的函数就好了。

    但是,因为,链接的最小单元一般是文件,.o。如果a.o和b.o同时存在test1(),但是a.o有test2(),b.o有test3(),结果这两个接口函数都会被系统使用,那么a.o和b.o就会被同时链接进去*。这就是为何会报多重定义的错误。

    为了让这种情况下,链接器还是不报错,还是只会找第一个遇到的库里面的函数。可以使用以下参数:

    -Wl,-z,multidefs或者Wl,'-z muldefs',以及--allow-multiple-definition

    让ld在遇到重复定义时候,只处理第一个定义。

    相关文章

      网友评论

          本文标题:链接时多重定义怎么办?

          本文链接:https://www.haomeiwen.com/subject/bxrbrktx.html