按照https://github.com/Qihoo360/mysql-sniffer上的安裝方法進行安裝,make是報錯如下
Linking CXX executable mysql-sniffer /usr/bin/ld: /root/mysql-sniffer/lib/libgthread-2.0.a(gthread-impl.o): undefined reference to symbol 'pthread_setspecific@@GLIBC_2.2.5' //usr/lib64/libpthread.so.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status make[2]: *** [bin/mysql-sniffer] Error 1 make[1]: *** [bin/CMakeFiles/mysql-sniffer.dir/all] Error 2 make: *** [all] Error 2
網上查詢原因是:
pthread 庫不是 Linux 系統默認的庫,連接時需要使用靜態庫 libpthread.a,所以在使用pthread_create()創建線程,以及調用 pthread_atfork()函數建立fork處理程序時,需要鏈接該庫。所以在編譯中要加 -lpthread參數。
通過查找rdynamic關鍵字找到文件proj/bin/CMakeFiles/mysql-sniffer.dir/link.txt,並在最后添加了-lpthread,重新make后成功。
/usr/bin/c++ -DENABLE_TCPREASM -O3 -Wall -DENABLE_TCPREASM -O2 CMakeFiles/mysql-sniffer.dir/main.c.o CMakeFiles/mysql-sniffer.dir/mysql-dissector.c.o CMakeFiles/mysql-sniffer.dir/util.c.o CMakeFiles/mysql-sniffer.dir/session.cpp.o CMakeFiles/mysql-sniffer.dir/sniff-config.cpp.o CMakeFiles/mysql-sniffer.dir/sniff-log.cpp.o -o mysql-sniffer -L/root/mysql-sniffer/lib -rdynamic -Wl,-Bstatic -lnidstcpreasm -lnet -lpcap -lglib-2.0 -lgthread-2.0 -Wl,-Bdynamic -lrt -Wl,-Bstatic -lnet -lpcap -lglib-2.0 -lgthread-2.0 -Wl,-Bdynamic -lrt -Wl,-rpath,/root/mysql-sniffer/lib -pthread
tips:
mysql_sniffer該工具好像只要編譯出來可執行文件后,復制到其他主機好像也可以使用。