CMake не связывает указанные библиотеки

Я работаю над проектом, размещенным здесь: https://github.com/gtorrent

Сейчас мы пытаемся улучшить поддержку Windows. Сама библиотека (gtorrent-core) работает нормально. Однако всякий раз, когда мы ссылаемся на него, появляется много неопределенных ссылок на различные функции libtorrent (библиотека, из которой мы строим). В настоящее время я использую MSYS2 и MinGW-w64-x86_64 для сборки самого проекта, а также всех необходимых библиотек.

Для графического интерфейса ncurses наши файлы CMakeLists.txt:

gtorrent-Ncurses / CMakeLists.txt:

###############
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT(gtorrent-ncurses)

SET(gtorrent-ncurses_VERSION_MAJOR 0)
SET(gtorrent-ncurses_VERSION_MINOR 0)
SET(gtorrent-ncurses_VERSION_PATCH 1)
###############

# Configure version into Version.hpp
SET (VERSION ${gtorrent-ncurses_VERSION_MAJOR}.${gtorrent-ncurses_VERSION_MINOR}.${gtorrent-ncurses_VERSION_PATCH})
CONFIGURE_FILE (src/utils/Version.hpp.in Version.hpp @ONLY)

# Set compiler options
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g -Wall")

# Set Cmake to build runtime in cwd
SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})

# Find Boost
SET (Boost_USE_STATIC_LIBS ON)
SET (Boost_USE_MULTITHREADED ON)
SET (Boost_USE_STATIC_RUNTIME OFF)
FIND_PACKAGE(Boost COMPONENTS system REQUIRED)

# Find libtorrent
INCLUDE (FindPkgConfig)
PKG_SEARCH_MODULE (LIBTORRENT REQUIRED libtorrent-rasterbar)

# Find ncurses
INCLUDE(CheckLibraryExists)
PKG_SEARCH_MODULE (NCURSESPP REQUIRED ncurses++w)
PKG_SEARCH_MODULE (NCURSES REQUIRED ncursesw)
PKG_SEARCH_MODULE (NCURSESPANEL REQUIRED panelw)

# To find version
INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR})

ADD_DEFINITIONS (
${LIBTORRENT_CFLAGS}
)

ADD_SUBDIRECTORY(gtorrent-core)
ADD_SUBDIRECTORY(src)

gtorrent-Ncurses / SRC / CMakeLists.txt

INCLUDE_DIRECTORIES (
${Boost_INCLUDE_DIRS}
${LIBTORRENT_INCLUDE_DIRS}
${NCURSESPP_INCLUDE_DIRS}
${NCURSES_INCLUDE_DIRS}
${CMAKE_SOURCE_DIR}/gtorrent-core/include
)

ADD_DEFINITIONS (
${LIBTORRENT_CFLAGS}
)

ADD_EXECUTABLE ( gtorrent-ncurses
main.cpp
Application.cpp
MainWindow.cpp
TorrentView.cpp
StatusView.cpp
AddTorrent.cpp
)

ADD_DEPENDENCIES (gtorrent-ncurses
gtorrent
)

LINK_DIRECTORIES (
${Boost_LIBRARY_DIRS}
${LIBTORRENT_LIBRARY_DIRS}
)

TARGET_LINK_LIBRARIES ( gtorrent-ncurses
${CMAKE_BINARY_DIR}/gtorrent-core/src/libgtorrent.a
${Boost_LIBRARIES}
${LIBTORRENT_LIBRARIES}
${NCURSESPP_LIBRARIES}
${NCURSES_LIBRARIES}
${NCURSESPANEL_LIBRARIES}
)

INSTALL (TARGETS gtorrent-ncurses RUNTIME DESTINATION ${PREFIX}/bin/ PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

А вот ошибки компилятора (слишком большие для публикации): http://pastebin.com/v3fPXXAE

Есть идеи, что не так?

0

Решение

Вы связываете BOOST_LIBRARIES до LIBTORRENT_LIBRARIES. Попробуйте изменить порядок, сначала ссылку LIBTORRENT_LIBRARIES, а затем ссылку BOOST_LIBRARIES. Компоновщик связывает только те объекты библиотеки, которые фактически используются объектами, которые были связаны ранее.

0

Другие решения


По вопросам рекламы [email protected]