Не собирается проект в Qt Creator (debug)
Компилирую проект в Qt Creator, в release всё нормально, всё собирается, программа работает. А вот в debug собрать не получается. Qt Creator выдает следующие ошибки:
Ругается на libpcap. Вот тут рекомендовали добавить параметр -lpcap, но непонятно куда его добавлять, если я работаю в Qt Creator, и почему всё нормально работает, если собирать в release.
upd + upd 3
Выход компилятора:
09:49:21: Running steps for project spiderweb...
09:49:21: Starting: "/home/gleb/Qt/Tools/CMake/bin/cmake" --build /home/gleb/Codes/spiderweb/build-spiderweb-Desktop_Qt_5_15_2_GCC_64bit-Debug --target all
[1/1 2.0/sec] Linking CXX executable bin/spiderweb
FAILED: bin/spiderweb
: && /usr/bin/g++ -g CMakeFiles/spiderweb.dir/spiderweb_autogen/mocs_compilation.cpp.o CMakeFiles/spiderweb.dir/spiderweb.cpp.o CMakeFiles/spiderweb.dir/main.cpp.o CMakeFiles/spiderweb.dir/submodules/interface/baseinterface.cpp.o CMakeFiles/spiderweb.dir/submodules/interface/coreModulesInterface.cpp.o -o bin/spiderweb -Wl,-rpath,/usr/local/lib:/home/gleb/Qt/5.15.2/gcc_64/lib:/home/gleb/Codes/spiderweb/build-spiderweb-Desktop_Qt_5_15_2_GCC_64bit-Debug/submodules/radiotap resources/libresources.a osModule/libosModule.a wirelessModule/libwirelessModule.a comModule/libcomModule.a submodules/Common/SpiderWeb/libspiderwebstructs.a /usr/lib/x86_64-linux-gnu/libpcap.so /usr/lib/x86_64-linux-gnu/libnl-3.so /usr/lib/x86_64-linux-gnu/libnl-route-3.so /usr/lib/x86_64-linux-gnu/libnl-genl-3.so /usr/local/lib/libtins.so /usr/local/lib/libPcap++.a /usr/local/lib/libPacket++.a /usr/local/lib/libCommon++.a /usr/lib/x86_64-linux-gnu/libpcap.so /usr/lib/x86_64-linux-gnu/libpthread.a -lfmt /usr/lib/x86_64-linux-gnu/libspdlog.so.1.8.1 /home/gleb/Qt/5.15.2/gcc_64/lib/libQt5Widgets.so.5.15.2 wirelessModule/libwirelessModule.a resources/libresources.a /home/gleb/Qt/5.15.2/gcc_64/lib/libQt5Widgets.so.5.15.2 /home/gleb/Qt/5.15.2/gcc_64/lib/libQt5Gui.so.5.15.2 /home/gleb/Qt/5.15.2/gcc_64/lib/libQt5Core.so.5.15.2 osModule/libosModule.a submodules/radiotap/libradiotap.so /home/gleb/Qt/5.15.2/gcc_64/lib/libQt5Core.so.5.15.2 /home/gleb/Qt/5.15.2/gcc_64/lib/libQt5Core.so.5.15.2 /home/gleb/Qt/5.15.2/gcc_64/lib/libQt5Widgets.so.5.15.2 /home/gleb/Qt/5.15.2/gcc_64/lib/libQt5Gui.so.5.15.2 /home/gleb/Qt/5.15.2/gcc_64/lib/libQt5Core.so.5.15.2 /usr/local/lib/libtins.so /usr/local/lib/libPcap++.a /usr/local/lib/libPacket++.a /usr/local/lib/libCommon++.a /usr/lib/x86_64-linux-gnu/libnl-3.so /usr/lib/x86_64-linux-gnu/libnl-route-3.so /usr/lib/x86_64-linux-gnu/libnl-genl-3.so /usr/lib/x86_64-linux-gnu/libpthread.a -lfmt /usr/lib/x86_64-linux-gnu/libfmt.so.7.1.3 -Wl,--as-needed /home/gleb/Qt/5.15.2/gcc_64/lib/libQt5Gui.so.5.15.2 /home/gleb/Qt/5.15.2/gcc_64/lib/libQt5Core.so.5.15.2 && cd /home/gleb/Codes/spiderweb/build-spiderweb-Desktop_Qt_5_15_2_GCC_64bit-Debug && /home/gleb/Qt/Tools/CMake/bin/cmake -E copy /home/gleb/Codes/spiderweb/spiderweb/external/oui.txt /home/gleb/Codes/spiderweb/build-spiderweb-Desktop_Qt_5_15_2_GCC_64bit-Debug/bin/oui.txt && cd /home/gleb/Codes/spiderweb/build-spiderweb-Desktop_Qt_5_15_2_GCC_64bit-Debug && /home/gleb/Qt/Tools/CMake/bin/cmake -E copy /home/gleb/Codes/spiderweb/build-spiderweb-Desktop_Qt_5_15_2_GCC_64bit-Debug/submodules/radiotap/libradiotap.so /home/gleb/Codes/spiderweb/build-spiderweb-Desktop_Qt_5_15_2_GCC_64bit-Debug/bin/libradiotap.so && cd /home/gleb/Codes/spiderweb/build-spiderweb-Desktop_Qt_5_15_2_GCC_64bit-Debug && /home/gleb/Qt/Tools/CMake/bin/cmake -E copy /home/gleb/Codes/spiderweb/spiderweb/external/create_ap /home/gleb/Codes/spiderweb/build-spiderweb-Desktop_Qt_5_15_2_GCC_64bit-Debug/bin/create_ap && cd /home/gleb/Codes/spiderweb/build-spiderweb-Desktop_Qt_5_15_2_GCC_64bit-Debug && /home/gleb/Qt/Tools/CMake/bin/cmake -E copy /home/gleb/Codes/spiderweb/spiderweb/external/get_client /home/gleb/Codes/spiderweb/build-spiderweb-Desktop_Qt_5_15_2_GCC_64bit-Debug/bin/get_client
/usr/bin/ld: wirelessModule/libwirelessModule.a(filewrite.cpp.o): undefined reference to symbol 'pcap_dump'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libpcap.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
09:49:22: The process "/home/gleb/Qt/Tools/CMake/bin/cmake" exited with code 1.
Error while building/deploying project spiderweb (kit: Desktop Qt 5.15.2 GCC 64bit)
When executing step "Build"
09:49:22: Elapsed time: 00:01.
CMakeList.txt:
cmake_minimum_required(VERSION 3.14)
project(spiderweb)
message (STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX}")
set(CMAKE_CXX_STANDARD 14)
set(SPIDERWEB_SOURCE_DIR ${SPIDERWEB_SOURCE_DIR} "${CMAKE_SOURCE_DIR}")
set(SPIDERWEB_SUBMODULES_SOURCE_DIR ${SPIDERWEB_SUBMODULES_SOURCE_DIR} "${CMAKE_SOURCE_DIR}/submodules")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
add_subdirectory(resources)
add_subdirectory(osModule)
add_subdirectory(wirelessModule)
add_subdirectory(comModule)
add_subdirectory(submodules/radiotap)
add_subdirectory(submodules/apimodulesspiderweb)
add_subdirectory(submodules/transportmodulestsp)
add_subdirectory(submodules/cyphermodulesblowfish)
add_subdirectory(submodules/coremodulesclient)
add_subdirectory(submodules/Common/SpiderWeb)
add_executable(${PROJECT_NAME} spiderweb.cpp
spiderweb.h
main.cpp
submodules/interface/baseinterface.cpp
submodules/interface/coreModulesInterface.cpp
submodules/interface/baseinterface.h
submodules/interface/coreModulesInterface.h
)
set_property(TARGET ${PROJECT_NAME} PROPERTY AUTOMOC ON)
set_target_properties(${PROJECT_NAME}
PROPERTIES
#ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
#LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)
target_link_libraries(${PROJECT_NAME} resources
osModule
wirelessModule
radiotap
comModule
spiderwebstructs
)
find_package(Boost COMPONENTS REQUIRED)
target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})
find_package(PCAP REQUIRED)
target_link_libraries(${PROJECT_NAME} ${PCAP_LIBRARY})
find_package(LibNL REQUIRED)
target_link_libraries(${PROJECT_NAME} ${MOD_LIBS} ${LibNL_LIBRARY}
${LibNL_ROUTE_LIBRARY}
${LibNL_GENL_LIBRARY}
)
find_library(TINS_LIBRARY tins)
target_link_libraries(${PROJECT_NAME} ${TINS_LIBRARY})
find_package(PcapPlusPlus REQUIRED)
target_link_libraries(${PROJECT_NAME} ${PcapPlusPlus_LIBRARIES})
find_package(fmt REQUIRED)
target_link_libraries(${PROJECT_NAME} fmt)
find_package(spdlog REQUIRED)
target_link_libraries(${PROJECT_NAME} spdlog::spdlog)
find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets)
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${SPIDERWEB_SOURCE_DIR}/external/oui.txt
${CMAKE_BINARY_DIR}/bin/oui.txt
)
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_BINARY_DIR}/submodules/radiotap/libradiotap.so
${CMAKE_BINARY_DIR}/bin/libradiotap.so
)
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${SPIDERWEB_SOURCE_DIR}/external/create_ap
${CMAKE_BINARY_DIR}/bin/create_ap
)
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${SPIDERWEB_SOURCE_DIR}/external/get_client
${CMAKE_BINARY_DIR}/bin/get_client
)
CMakeList.txt в wirelessmodule:
set(wirelessModule_SRCS
oui.cpp
packetparse.cpp
filewrite.cpp
scandata.cpp
parsedata.cpp
wirelessinterfacecontroller.cpp
device.cpp
)
set(wirelessModule_HDRS
oui.h
packetparse.h
filewrite.h
scandata.h
parsedata.h
wirelessinterfacecontroller.h
device.h
)
add_library(wirelessModule ${wirelessModule_SRCS} ${wirelessModule_HDRS})
set_property(TARGET wirelessModule PROPERTY AUTOMOC ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
target_link_libraries(wirelessModule Qt5::Core)
target_link_libraries(wirelessModule osModule resources radiotap)
target_include_directories(
wirelessModule PUBLIC ${SPIDERWEB_SOURCE_DIR}
${SPIDERWEB_SUBMODULES_SOURCE_DIR}
)
upd 2
Файл cmake/Modules/FindPCAP.cmake:
find_path(PCAP_ROOT_DIR
NAMES include/pcap.h
)
find_path(PCAP_INCLUDE_DIR
NAMES pcap.h
HINTS ${PCAP_ROOT_DIR}/include
)
find_library(PCAP_LIBRARY
NAMES pcap
HINTS ${PCAP_ROOT_DIR}/lib
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(PCAP DEFAULT_MSG
PCAP_LIBRARY
PCAP_INCLUDE_DIR
)
include(CheckCSourceCompiles)
set(CMAKE_REQUIRED_LIBRARIES ${PCAP_LIBRARY})
check_c_source_compiles("int main() { return 0; }" PCAP_LINKS_SOLO)
set(CMAKE_REQUIRED_LIBRARIES)
# check if linking against libpcap also needs to link against a thread library
if (NOT PCAP_LINKS_SOLO)
find_package(Threads)
if (THREADS_FOUND)
set(CMAKE_REQUIRED_LIBRARIES ${PCAP_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
check_c_source_compiles("int main() { return 0; }" PCAP_NEEDS_THREADS)
set(CMAKE_REQUIRED_LIBRARIES)
endif ()
if (THREADS_FOUND AND PCAP_NEEDS_THREADS)
set(_tmp ${PCAP_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
list(REMOVE_DUPLICATES _tmp)
set(PCAP_LIBRARY ${_tmp}
CACHE STRING "Libraries needed to link against libpcap" FORCE)
else ()
message(FATAL_ERROR "Couldn't determine how to link against libpcap")
endif ()
endif ()
include(CheckFunctionExists)
set(CMAKE_REQUIRED_LIBRARIES ${PCAP_LIBRARY})
check_function_exists(pcap_get_pfring_id HAVE_PF_RING)
check_function_exists(pcap_dump_open_append HAVE_PCAP_DUMP_OPEN_APPEND)
set(CMAKE_REQUIRED_LIBRARIES)
mark_as_advanced(
PCAP_ROOT_DIR
PCAP_INCLUDE_DIR
PCAP_LIBRARY
)

