2017-04-10 104 views
1

我想在我的Linux上的Clion项目中使用pcap。 我安装的libpcap-dev的:cmake:undefined引用任何pcap函数

sudo apt-get install libpcap-dev 

但后来我尝试编译任何文件,包含类似PCAP功能:

#include <stdio.h> 
#include <pcap.h> 

int main(int argc, char *argv[]) 
{ 
    char *dev, errbuf[PCAP_ERRBUF_SIZE]; 

    dev = pcap_lookupdev(errbuf); 
    if (dev == NULL) { 
     fprintf(stderr, "Couldn't find default device: %s\n", errbuf); 
     return(2); 
    } 
    printf("Device: %s\n", dev); 
    return(0); 
} 

我有cmake的错误:

CMakeFiles/main.cpp.o: In function `main': 
/main.cpp:8: undefined reference to `pcap_lookupdev' 

我没有之前使用过cmake。 cmake的文件:

cmake_minimum_required(VERSION 3.7) 
project(mypr) 

set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.cpp) 
add_executable(mypr ${SOURCE_FILES}) 
+0

你不链接到PCAP。没有CMake你会得到完全相同的错误。你需要一个合适的['target_link_libraries()'](https://cmake.org/cmake/help/latest/command/target_link_libraries.html)命令。 – Angew

回答

1

您应该包括和使用FindPCAP.cmake文件到您的CMakeLists.txt。这里是一个:https://github.com/bro/cmake/blob/master/FindPCAP.cmake

把FindPCAP.cmake在项目的源目录,并试着改变你的CMakeLists.txt到:

cmake_minimum_required(VERSION 3.7) 
project(mypr) 

set(CMAKE_CXX_STANDARD 11) 

include(FindPCAP.cmake) 

set(SOURCE_FILES main.cpp) 
add_executable(mypr ${SOURCE_FILES}) 
target_link_libraries(mypr ${PCAP_LIBRARY}) 
+1

谢谢! 一条评论: include(FindPCAP.cmake) –

+0

使用find_package(PCAP REQUIRED)而不是直接的include(FindPCAP.cmake)是否更有意义? –

+0

如果现在在默认的cmake路径中存在FindPCAP.cmake,那么这是有道理的。 –