2017-04-10 18 views
1

Linux上の私のClionプロジェクトでpcapを使いたいです。 私はのlibpcap-devのインストール:cmake:pcap関数の定義されていない参照

sudo apt-get install libpcap-dev 

をしかし、私は次のようにPCAP機能を含む、任意のファイルをコンパイルしよう:私はcmakeのエラーを持っている

#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); 
} 

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

:プロジェクトのソースディレクトリにFindPCAP.cmakeを入れhttps://github.com/bro/cmake/blob/master/FindPCAP.cmake

とにあなたのCMakeLists.txtを変更してみてください:ここでは1です。あなたはCMakeなしでまったく同じエラーを得るでしょう。適切な['target_link_libraries()'](https://cmake.org/cmake/help/latest/command/target_link_libraries.html)コマンドが必要です。 – Angew

答えて

1

あなたのCMakeLists.txtにFindPCAP.cmakeファイルをインクルードして使用する必要があります。あなたがPCAPにリンクしていない

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

ありがとうございます! 1つの発言: include(FindPCAP.cmake) –

+0

直接 'include(FindPCAP.cmake)'の代わりに 'find_package(PCAP REQUIRED)'を使う方がいいでしょうか? –

+0

デフォルトのcmakeパスにFindPCAP.cmakeがある場合、それは意味があります。 –

関連する問題