C++ 使用Pcap++;cmake图书馆

C++ 使用Pcap++;cmake图书馆,c++,cmake,linker,pcap,pcapplusplus,C++,Cmake,Linker,Pcap,Pcapplusplus,我目前正在将Qt Creator项目转换为cmake项目,无法再编译我的程序。我使用库PcapPlusPlus作为子模块,因为我们对原始库做了一些重大更改。我使用他们的说明中建议的构建链,并在子模块中使用“/configurelinux--default”和“makelibs”。因此*.a文件的路径是正确的。还提到项目仍然可以使用QtCreator编译(QtCreator也具有相同的依赖项) 这是我的CMakeLists.txt: cmake_最低要求(3.16版) 项目(mitm) 设置(CM

我目前正在将Qt Creator项目转换为cmake项目,无法再编译我的程序。我使用库PcapPlusPlus作为子模块,因为我们对原始库做了一些重大更改。我使用他们的说明中建议的构建链,并在子模块中使用“/configurelinux--default”和“makelibs”。因此*.a文件的路径是正确的。还提到项目仍然可以使用QtCreator编译(QtCreator也具有相同的依赖项)

这是我的CMakeLists.txt:

cmake_最低要求(3.16版)
项目(mitm)
设置(CMAKE_前缀_路径~/Qt/5.15.0/gcc_64/lib/CMAKE/)
#pthread
设置(线程\u首选\u PTHREAD\u标志打开)
查找_包(需要线程)
#pcap
包括(FindPCAP.cmake)
查找包(需要QT5核心)
查找_包(需要Qt5Widgets)
套装(CMAKE_CXX_标准14)
包含目录(.)
包括目录(${CMAKE\u SOURCE\u DIR}/./Pcap++/header/)
包括目录(${CMAKE\u SOURCE\u DIR}/./Packet++/header/)
包括目录(${CMAKE\u SOURCE\u DIR}/。/Common++/header/)
添加可执行文件(mitm“”)
设置目标属性(mitm属性
自动监控
自动开启
自动抄送(ON)
设置(源文件)
类/base/wrapper/connection.cpp
classes/base/wrapper/connection.h
类/base/wrapper/connectionlist.cpp
classes/base/wrapper/connectionlist.h
类/base/wrapper/hostlist.cpp
classes/base/wrapper/hostlist.h
类/base/connectionmanager.cpp
classes/base/connectionmanager.h
main.cpp
wmain.cpp
wmain.h
wmain.ui
wsetup.cpp
wsetup.h
wsetup.ui)
设置(资源)文件
字体(qrc)
目标源(mitm专用)
${SOURCE_FILES}
${RESOURCE_FILES})
目标链接库(mitm专用)
Qt5::小部件
“${CMAKE\u SOURCE\u DIR}/./Common++/Lib/Release/libCommon++.a”
“${CMAKE_SOURCE_DIR}/./Pcap++/Lib/libPcap++.a”
“${CMAKE\u SOURCE\u DIR}/./Packet++/Lib/libPacket++.a”
线程::线程
${PCAP_库}
)
/usr/bin/ld:../../Pcap++/Lib/libPcap++.a(PcapLiveDevice.o):在函数“pcpp::PcapLiveDevice::startCaptureBlockingMode(bool(*)(pcpp::RawPacket*,pcpp::PcapLiveDevice*,void*,void*,int)”中:
/home/bemerged/Documents/Git/mitm/Pcap++/src/PcapLiveDevice.cpp:492:对“pcpp::clockGetTime(long&,long&)”的未定义引用
/usr/bin/ld:/home/bemerged/Documents/Git/mitm/Pcap++/src/PcapLiveDevice.cpp:512:对“pcpp::clockGetTime(long&,long&)”的未定义引用
/usr/bin/ld:../../Pcap++/Lib/libPcap++.a(PcapLiveDevice.o):在函数“pcpp::PcapLiveDevice::getIPv4Address()const”中:
/home/bemerged/Documents/Git/mitm/Pcap++/src/PcapLiveDevice.cpp:905:对“pcpp::sockaddr2in_addr(sockaddr*)”的未定义引用
/usr/bin/ld:/home/bemerged/Documents/Git/mitm/Pcap++/src/PcapLiveDevice.cpp:901:对“pcpp::sockaddr2string(sockaddr*,char*)”的未定义引用
/usr/bin/ld:/home/bemerged/Documents/Git/mitm/Pcap++/src/PcapLiveDevice.cpp:905:对“pcpp::sockaddr2in_addr(sockaddr*)”的未定义引用
/usr/bin/ld:../../Pcap++/Lib/libPcap++.a(PcapLiveDevice.o):在函数“pcpp::PcapLiveDevice::PcapLiveDevice(Pcap_if*,bool,bool,bool)”中:

/home/bemerged/Documents/Git/mitm/Pcap++/src/PcapLiveDevice.cpp:101:对“pcpp::sockaddr2string(sockaddr*,char*)”的未定义引用
FindPCAP.cmake
搜索lib Pcap,C库。您使用C++与Pcap +,并应附加链接与LIB PCAPLUS +或PCAP++和包++。p>

谢谢您的回答。我链接了pcap c库,因为pcpp依赖于它。在没有pcap链接的情况下进行编译时,我会遇到更多错误,例如在函数
pcpp::PcapLiveDevice::capturaReadMain(void*)':PcapLiveDevice.cpp:208:未定义对
pcap\u dispatch'的引用,我没有使用任何“FindPcap++”因为正如我所说,我使用的是pcap++的自定义版本,所以我尝试链接到目标链接库中的pcap++库。我还包括了包含目录(${CMAKE\u SOURCE\u DIR}/。/pcap++/header/)、包含目录(${CMAKE\u SOURCE\u DIR}/。/Packet++/header/)、包含目录(${CMAKE\u SOURCE\u DIR}/。/Common++/header/)你完全误解了我说的话。你能告诉我你当时说了什么吗?:)