Ошибка в CMake в CLion с подключением библиотеки

316
16 июля 2017, 12:10

Не удается подключить библиотеку zlib к проекту.

Вот такой CMake имеется

cmake_minimum_required(VERSION 3.7)
project(PcapCatalog)
set(CMAKE_CXX_STANDARD 14)
set (HEADERS ethernet_frame.h icmp_packet.h ipv4_packet.h     ipv6_packet.h pcap.h tcp_segment.h udp_datagram.h)
set(SOURCE_FILES ethernet_frame.cpp icmp_packet.cpp ipv4_packet.cpp ipv6_packet.cpp
        pcap.cpp Source.cpp tcp_segment.cpp udp_datagram.cpp Source.cpp)
set (SOURCES_LIB kaitai/kaitaistream.cpp)
set(HEARERS_LIB kaitai/kaitaistream.h kaitai/kaitaistruct.h)
add_library (kaitai STATIC ${HEADERS_LIB} ${SOURCES_LIB})
include_directories(kaitai)
add_subdirectory(kaitai)
find_package( ZLIB REQUIRED )
add_executable(PcapCatalog ${HEADERS} ${SOURCE_FILES})
if ( ZLIB_FOUND )
    include_directories( ${ZLIB_INCLUDE_DIRS} )
    target_link_libraries( PcapCatalog ${ZLIB_LIBRARIES} )
endif( ZLIB_FOUND )
target_link_libraries(PcapCatalog kaitai)

Вот такой результат в CLion

libkaitai.a(kaitaistream.cpp.o): In function kaitai::kstream::process_zlib(std::__cxx11::basic_string, std::allocator >):

/home/cryztal/CLionProjects/PcapCatalog/kaitai/kaitaistream.cpp:456: undefined reference to inflateInit_'

/home/cryztal/CLionProjects/PcapCatalog/kaitai/kaitaistream.cpp:471: undefined reference to inflate'

/home/cryztal/CLionProjects/PcapCatalog/kaitai/kaitaistream.cpp:483: undefined reference to inflateEnd'

collect2: error: ld returned 1 exit status

CMakeFiles/PcapCatalog.dir/build.make:278: ошибка выполнения рецепта для цели «PcapCatalog»

make[3]: *** [PcapCatalog] Ошибка 1

CMakeFiles/Makefile2:67: ошибка выполнения рецепта для цели

«CMakeFiles/PcapCatalog.dir/all»

make[2]: *** [CMakeFiles/PcapCatalog.dir/all] Ошибка 2

CMakeFiles/Makefile2:79: ошибка выполнения рецепта для цели «CMakeFiles/PcapCatalog.dir/rule»

make[1]: *** [CMakeFiles/PcapCatalog.dir/rule] Ошибка 2

Makefile:162: ошибка выполнения рецепта для цели «PcapCatalog»

make: *** [PcapCatalog] Ошибка 2

Answer 1

Я не знаю, что за библиотека kaitai, но сообщение об ошибке линкер выдаёт именно для неё, а вовсе не для PcapCatalog.

Следовательно, если ссылка inflateInit_ расположена в библиотеке zlib, то должно быть и подключение этой библиотеки к kaitai. Нечто вроде:

target_link_libraries(kaitai ${ZLIB_LIBRARIES})

Вот только с порядком этих подключений надо разобраться.

READ ALSO
Заполнить нулями без memset и ZeroMemory (C++)

Заполнить нулями без memset и ZeroMemory (C++)

Добрый вечер! Необходимо реализовать полностью без CRT

308
Проблемы с Visual Studio

Проблемы с Visual Studio

Учился раньше на NetBeansРешил попробовать один из самых известных компиляторов

334
undefined reference to `__imp_WSAStartup'

undefined reference to `__imp_WSAStartup'

Что нужно добавить в CMakeList чтобы подключить Ws2_32lib?

286
Можно ли по параметрам драйвера камеры определить снимает ли она в перевёрнутом режиме, или нет?

Можно ли по параметрам драйвера камеры определить снимает ли она в перевёрнутом режиме, или нет?

Некоторые веб-камеры выдают перевёрнутые кадры, как правило из-за кривых драйверов

247