skip to Main Content

Trying to compile dot11decrypt on debian, installed apt-get install libtins4.0 and apt-get install libtins-dev, but cmake .. can’t find package libtins, heres the error:

CMake Error at CMakeLists.txt:4 (FIND_PACKAGE):
By not providing "Findlibtins.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "libtins", but
CMake did not find one.

Could not find a package configuration file provided by "libtins" with any
of the following names:

libtinsConfig.cmake
libtins-config.cmake

Add the installation prefix of "libtins" to CMAKE_PREFIX_PATH or set
"libtins_DIR" to a directory containing one of the above files.  If
"libtins" provides a separate development package or SDK, be sure it has
been installed.


-- Configuring incomplete, errors occurred!
See also "/home/user/dot11decrypt/build/CMakeFiles/CMakeOutput.log".

cat:dot11decrypt/CMakeLists.txt

1. CMAKE_MINIMUM_REQUIRED(VERSION 2.8.1)
2. PROJECT(dot11decrypt)
3. 
4. FIND_PACKAGE(libtins REQUIRED)
5.
6. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
7.
8. ADD_EXECUTABLE(dot11decrypt dot11decrypt.cpp)
9. TARGET_LINK_LIBRARIES(dot11decrypt ${LIBTINS_LIBRARIES} pthread)

find / -name Findlibtins.cmake or libtinsConfig.cmake brings no result.

I found those files on internet but still no success, i think i have to install something but don’t know what.

2

Answers


  1. Chosen as BEST ANSWER

    I went with Tsyvarev solution.

    # installing missing dependencies for libtins
    apt-get install libpcap-dev libssl-dev cmake
    # installing libtins
    git clone https://github.com/mfontanini/libtins.git
    cd libtins
    mkdir build
    cd build
    cmake ../
    make
    checkinstall
    

    Now cmake will reach dot11decrypt missing files.

    # installing dot11decrypt
    git clone https://github.com/mfontanini/dot11decrypt.git
    cd dot11decrypt/
    mkdir build
    cd build/
    cmake ../
    make
    

    Now you should have dot11decrypt executable.

    If i would have to do it again i would try Alex Reinking solution first.


  2. You don’t need to compile from source… find_package is a very flexible configuration point! You’ll just need to provide your own find module that is sufficient for the build. Fortunately, this is very simple. Here’s what I did:

    $ https://github.com/mfontanini/dot11decrypt
    $ cd dot11decrypt
    $ mkdir _patches
    $ vim _patches/Findlibtins.cmake
    $ cat _patches/Findlibtins.cmake 
    find_package(PkgConfig REQUIRED)
    pkg_check_modules(LIBTINS REQUIRED libtins)
    $ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_MODULE_PATH=$PWD/_patches
    CMake Deprecation Warning at CMakeLists.txt:1 (CMAKE_MINIMUM_REQUIRED):
      Compatibility with CMake < 2.8.12 will be removed from a future version of
      CMake.
    
      Update the VERSION argument <min> value or use a ...<max> suffix to tell
      CMake that the project does not need compatibility with older versions.
    
    
    -- The C compiler identification is GNU 9.4.0
    -- The CXX compiler identification is GNU 9.4.0
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working C compiler: /usr/bin/cc - skipped
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Check for working CXX compiler: /usr/bin/c++ - skipped
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
    -- Checking for module 'libtins'
    --   Found libtins, version 4.0
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/alex/test/dot11decrypt/build
    $ cmake --build build/
    [ 50%] Building CXX object CMakeFiles/dot11decrypt.dir/dot11decrypt.cpp.o
    /home/alex/test/dot11decrypt/dot11decrypt.cpp: In function ‘void decrypt_traffic(unique_fd, const string&, decrypter_tuple)’:
    /home/alex/test/dot11decrypt/dot11decrypt.cpp:333:39: warning: ‘Tins::Sniffer::Sniffer(const string&, unsigned int, bool, const string&, bool)’ is deprecated [-Wdeprecated-declarations]
      333 |     Sniffer sniffer(iface, 2500, false);
          |                                       ^
    In file included from /usr/include/tins/dns.h:38,
                     from /usr/include/tins/tins.h:33,
                     from /home/alex/test/dot11decrypt/dot11decrypt.cpp:25:
    /usr/include/tins/sniffer.h:369:5: note: declared here
      369 |     TINS_DEPRECATED(Sniffer(const std::string& device, unsigned max_packet_size,
          |     ^~~~~~~~~~~~~~~
    [100%] Linking CXX executable dot11decrypt
    [100%] Built target dot11decrypt
    

    The key here is to create a minimal Find module. This is just two lines on my system since it isn’t meant to be reusable…

    # _patches/Findlibtins.cmake
    find_package(PkgConfig REQUIRED)
    pkg_check_modules(LIBTINS REQUIRED libtins)
    

    This just delegates the responsibility of setting the LIBTINS_LIBRARIES to pkg-config. To connect this find module to the build, I just set -DCMAKE_MODULE_PATH=$PWD/_patches at the CMake configure command line.

    Also, you should definitely open a bug report with the dot11decrypt author about their broken and outdated build. Notice the strongly worded deprecation warning in the logs I posted.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search