关于G++库链接的一个问题
我们的项目是按模块开发的,所以需要在生成可执行文件时将所有的模块都链接起来,我想这个是每个程序员都知道的事情,不管是在WINDOWS下,还是在LINUX下都不例外。
但今天在做项目的时候,遇到一个GCC链接的一个问题,这个问题让人感觉很怪异,感觉是G++的一个BUG:我写了两个库A和B,其中B用到了A库,而生成可执行文件的项目C同时用到了A和B,当然,我在链接的时候都是加上了A和B库,而且也正确设置了库A与库B的路径,但是就是链接不成功,G++总是不能链接到库B引用库A的函数,这让我感到很纳闷。后来我想会不会是链接顺序的问题,以前可从来没有遇到过这种问题,出问题的链接顺序是将A置于前,B置于后;于是我将B置于前,A置于后,编译链接就成功了。
即此,感觉G++在这链接顺序上就没有VC的链接器做得人性化了。我想G++之所以会出现这样的问题,是因为当链接器链接到B的时候,所有库都已经链接了,但发现还有一些函数找不到实现,所以会报链接错误;而当顺序设置为B前A后时,链接器链接到B的时候找不到的那些函数可以在这后的A库中找到,所以正确。
- 原文作者:Witton
- 原文链接:https://wittonbell.github.io/posts/2008/2008-07-15-关于G++库链接的一个问题/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。