首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake -依赖于PcapPlusPlus构建应用程序时遇到的未定义符号

CMake -依赖于PcapPlusPlus构建应用程序时遇到的未定义符号
EN

Stack Overflow用户
提问于 2021-03-17 19:51:28
回答 1查看 50关注 0票数 1

我使用PcapPlusPlus库和CLion在MacOS上编写了一个简单的应用程序。代码非常简单:

代码语言:javascript
复制
#include "../include/PCPP/PcapFileDevice.h"

int main(int argc, char* argv[])
{
    std::string path;
    pcpp::PcapFileReaderDevice reader(path);
    reader.open();
    reader.close();
    return 0;
}

下面是CMakeLists.txt:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
project (Test CXX)
add_executable(cmd_main ${PROJECT_SOURCE_DIR}/test/cmd_main.cpp)
target_include_directories(cmd_main
    PUBLIC 
        ${PROJECT_SOURCE_DIR}/include)
target_link_libraries(cmd_main
    PUBLIC
        ${PROJECT_SOURCE_DIR}/lib/libCommon++.a
        ${PROJECT_SOURCE_DIR}/lib/libPacket++.a
        ${PROJECT_SOURCE_DIR}/lib/libPcap++.a
)

目录也很简单:

代码语言:javascript
复制
|
|--include
|----PCPP/
|--lib
|----libCommon++.a
|----libPacket++.a
|----libPcap++.a
|--test
|----cmd_main.cpp

下面是编译结果:

代码语言:javascript
复制
(base) 2ir0@iMac Test % cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/2ir0/Documents/Maltrace
(base) 2ir0@iMac Test % make
Scanning dependencies of target cmd_main
[ 50%] Building CXX object CMakeFiles/cmd_main.dir/test/cmd_main.cpp.o
[100%] Linking CXX executable cmd_main
Undefined symbols for architecture x86_64:
  "_pcap_close", referenced from:
      pcpp::IFileDevice::close() in libPcap++.a(PcapFileDevice.o)
      pcpp::PcapFileReaderDevice::open() in libPcap++.a(PcapFileDevice.o)
  "_pcap_compile", referenced from:
      pcpp::IPcapDevice::setFilter(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in libPcap++.a(PcapDevice.o)
......
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [cmd_main] Error 1
make[1]: *** [CMakeFiles/cmd_main.dir/all] Error 2
make: *** [all] Error 2

看起来cmd_main没有链接PcapPlusPlus库。但是为什么呢?

EN

回答 1

Stack Overflow用户

发布于 2021-03-17 20:54:45

我仔细阅读了错误信息,发现PcapPlusPlus需要libpcap库,所以我添加了libpcap.a,并修复了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66672530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档