c/c++语言开发共享gcc/g++ 链接顺序注意事项

我们知道选项 l是指定要链接的库,但是如果有多个库的时候,哪个放前面哪个放后面呢? 结论:被别的库使用的库,放在使用它的库的后面 使用下面的代码,验证一下 shell $ g++ 01.cc lmuduo_net lmuduo_base std=c++11 pthread 最佳方案:编译时把mudu …

我们知道选项-l是指定要链接的库,但是如果有多个库的时候,哪个放前面哪个放后面呢?

结论:被别的库使用的库,放在使用它的库的后面

使用下面的代码,验证一下

#include <muduo/base/logging.h> #include <muduo/net/eventloop.h>  muduo::net::eventloop* g_loop; int timerfd;  int main(void) {   muduo::net::eventloop loop;   g_loop = &loop;   //log_info << "pid = " << getpid();//------① } 

这段代码使用了muduo库里的base库(logging属于base库)和net库(eventloop属于net库)。

那么,使用下面的命令(muduo_base放在muduo_net之前了),编译它的时候,就会出错误。

$ g++ 01.cc -lmuduo_base -lmuduo_net -std=c++11 -pthread 

错误信息:无法链接logger类。

/muduo-2.0.0/muduo/net/eventloop.cc:38: undefined reference to `muduo::logger::logger(muduo::logger::sourcefile, int, bool)' 

检查了一遍,logger确实是在库muduo_base里的,头文件也都对,为什么呢?

修改代码,把①处的注释打开,再用下面的命令编译,编译居然通过了。

$ g++ 01.cc -lmuduo_base -lmuduo_net -std=c++11 -pthread 

注释打开后,就告诉了编译起,要使用log_info,log_info在库muduo_base里,所以链接的时候,就会把log_info包含进来;注释没有打开的时候,由于没有使用log_info,所以链接的时候,就没有把log_info包含进来,所以就导致了编译eventloop时,发现eventloop.cc的第38行,使用了logging类,但是logging类又没有被包含进来,就发生了编译错误。

再把①处的注释掉,使用下面的命令编译,也可以编译通过了。

$ g++ 01.cc -lmuduo_net -lmuduo_base -std=c++11 -pthread 

最佳方案:编译时把muduo_net放在muduo_base后面。

c/c++ 学习互助qq群:877684253 本人微信:xiaoshitou5854

gcc/g++ 链接顺序注意事项

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/599749.html

(0)
上一篇 2021年5月9日
下一篇 2021年5月9日

精彩推荐