【问题标题】:Use Pcap++ library in cmake在 cmake 中使用 Pcap++ 库
【发布时间】:2020-06-07 20:15:33
【问题描述】:

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

这是我的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.16)
project(mitm)

set(CMAKE_PREFIX_PATH ~/Qt/5.15.0/gcc_64/lib/cmake/)

#pthread
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)

#pcap
include(FindPCAP.cmake)

find_package(Qt5Core REQUIRED)
find_package(Qt5Widgets REQUIRED)

set(CMAKE_CXX_STANDARD 14)

include_directories(.)
include_directories("${CMAKE_SOURCE_DIR}/../Pcap++/header/")
include_directories("${CMAKE_SOURCE_DIR}/../Packet++/header/")
include_directories("${CMAKE_SOURCE_DIR}/../Common++/header/")

add_executable(mitm "")

set_target_properties(mitm PROPERTIES
        AUTOMOC ON
        AUTOUIC ON
        AUTORCC ON)

set(SOURCE_FILES
        classes/base/wrapper/connection.cpp
        classes/base/wrapper/connection.h
        classes/base/wrapper/connectionlist.cpp
        classes/base/wrapper/connectionlist.h
        classes/base/wrapper/hostlist.cpp
        classes/base/wrapper/hostlist.h
        classes/base/connectionmanager.cpp
        classes/base/connectionmanager.h
        main.cpp
        wmain.cpp
        wmain.h
        wmain.ui
        wsetup.cpp
        wsetup.h
        wsetup.ui)

set(RESOURCE_FILES
        fonts.qrc)

target_sources(mitm PRIVATE
        ${SOURCE_FILES}
        ${RESOURCE_FILES})

target_link_libraries(mitm PRIVATE
        Qt5::Widgets
        "${CMAKE_SOURCE_DIR}/../Common++/Lib/Release/libCommon++.a"
        "${CMAKE_SOURCE_DIR}/../Pcap++/Lib/libPcap++.a"
        "${CMAKE_SOURCE_DIR}/../Packet++/Lib/libPacket++.a"
        Threads::Threads
        ${PCAP_LIBRARY}
        )

/usr/bin/ld: ../../Pcap++/Lib/libPcap++.a(PcapLiveDevice.o): in function `pcpp::PcapLiveDevice::startCaptureBlockingMode(bool (*)(pcpp::RawPacket*, pcpp::PcapLiveDevice*, void*), void*, int)':
/home/bemerged/Documents/Git/mitm/Pcap++/src/PcapLiveDevice.cpp:492: undefined reference to `pcpp::clockGetTime(long&, long&)'
/usr/bin/ld: /home/bemerged/Documents/Git/mitm/Pcap++/src/PcapLiveDevice.cpp:512: undefined reference to `pcpp::clockGetTime(long&, long&)'
/usr/bin/ld: ../../Pcap++/Lib/libPcap++.a(PcapLiveDevice.o): in function `pcpp::PcapLiveDevice::getIPv4Address() const':
/home/bemerged/Documents/Git/mitm/Pcap++/src/PcapLiveDevice.cpp:905: undefined reference to `pcpp::sockaddr2in_addr(sockaddr*)'
/usr/bin/ld: /home/bemerged/Documents/Git/mitm/Pcap++/src/PcapLiveDevice.cpp:901: undefined reference to `pcpp::sockaddr2string(sockaddr*, char*)'
/usr/bin/ld: /home/bemerged/Documents/Git/mitm/Pcap++/src/PcapLiveDevice.cpp:905: undefined reference to `pcpp::sockaddr2in_addr(sockaddr*)'
/usr/bin/ld: ../../Pcap++/Lib/libPcap++.a(PcapLiveDevice.o): in function `pcpp::PcapLiveDevice::PcapLiveDevice(pcap_if*, bool, bool, bool)':
/home/bemerged/Documents/Git/mitm/Pcap++/src/PcapLiveDevice.cpp:101: undefined reference to `pcpp::sockaddr2string(sockaddr*, char*)'

我对 cmake 很陌生,到目前为止我已经尽力了。我确定这是 pcap++ 库中的链接问题。正如你可能猜到的那样,我现在用谷歌搜索了大约 2 个小时,并没有找到任何可以解决我的问题的东西。

【问题讨论】:

    标签: c++ cmake linker pcap pcapplusplus


    【解决方案1】:

    FindPCAP.cmake 搜索 lib pcap,C 库。您将 C++ 与 Pcap++ 一起使用,并且还应与 lib pcaplusplus 或 Pcap++ 和 Packet++ 链接。

    cmake linking against static libraries - do you have to tell cmake where to look?

    【讨论】:

    • 感谢您的回答。我链接了 pcap c 库,因为 pcpp 依赖于它。在没有 pcap 链接的情况下编译时,我会遇到更多错误,例如函数 pcpp::PcapLiveDevice::captureThreadMain(void*)': PcapLiveDevice.cpp:208: undefined reference to pcap_dispatch' 我没有使用任何“FindPcap++”,因为正如我所说,我使用的是自定义版本的 pcap++
    • 我尝试链接到 target_link_libraries 部分中的 pcap++ 库,我还使用 include_directories("${CMAKE_SOURCE_DIR}/../Pcap++/header/") include_directories("${CMAKE_SOURCE_DIR}/ ../Packet++/header/") include_directories("${CMAKE_SOURCE_DIR}/../Common++/header/")
    • 你完全误解了我说的话。
    • 你能告诉我你当时说了什么吗? :)
    猜你喜欢
    • 1970-01-01
    • 2013-08-02
    • 2023-03-29
    • 2017-10-31
    • 1970-01-01
    • 2012-05-21
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多