咱们知道选项-l是指定要连接的库,可是若是有多个库的时候,哪一个放前面哪一个放后面呢?c++
使用下面的代码,验证一下shell
#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以前了),编译它的时候,就会出错误。oop
$ 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里的,头文件也都对,为何呢?c++11
修改代码,把①处的注释打开,再用下面的命令编译,编译竟然经过了。code
$ 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类又没有被包含进来,就发生了编译错误。get
再把①处的注释掉,使用下面的命令编译,也能够编译经过了。it
$ g++ 01.cc -lmuduo_net -lmuduo_base -std=c++11 -pthread