2015-10-21 3 views
0

У меня есть локальная установка библиотек буста (в частности, версия 1,59) на более старый установку Ubuntu 11.04 я установить его таким образом, чтобы установить в своем домашнем каталоге в следующем месте:подталкивания 1,59 компоновщик ошибка

${HOME}/boost_1_59 

Я использую следующий CMake файл для компиляции и сборки программы, что я работаю на:

cmake_minimum_required(VERSION 2.8) 

project(myproject C CXX) 

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) 
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -pthread") 

set(BOOST_ROOT "/home/user/boost_1_59") 

set(BOOST_MIN_VERSION   "1.59") 
set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_LIBS  ON) 

find_package(Boost ${BOOST_MIN_VERSION} COMPONENTS filesystem thread system REQUIRED) 

if(Boost_FOUND) 
    set(BOOST_LIBRARYDIR "/home/user/boost_1_59/lib") 
    set(BOOST_INCLUDEDIR "/home/user/boost_1_59/include") 

    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR}) 

    add_executable(TorcPause main.cpp) 
    target_link_libraries(TorcPause ${Boost_LIBRARIES}) 
endif() 

При попытке компиляции проекта, я получаю следующие ошибки компоновщика (я всегда уничтожить " build ", чтобы гарантировать, что CMake не извлекает кеш, поскольку это известная проблема при попытке использовать импульс с CMake):

CMakeFiles/TorcPause.dir/TorcPause.cpp.o: In function `boost::asio::error::get_system_category()': 
TorcPause.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[boost::asio::error::get_system_category()]+0x5): undefined reference to `boost::system::system_category()' 
CMakeFiles/TorcPause.dir/TorcPause.cpp.o: In function `boost::thread_exception::thread_exception(int, char const*)': 
TorcPause.cpp:(.text._ZN5boost16thread_exceptionC2EiPKc[_ZN5boost16thread_exceptionC5EiPKc]+0x14): undefined reference to `boost::system::system_category()' 
CMakeFiles/TorcPause.dir/TorcPause.cpp.o: In function `boost::condition_error::condition_error(int, char const*)': 
TorcPause.cpp:(.text._ZN5boost15condition_errorC2EiPKc[_ZN5boost15condition_errorC5EiPKc]+0x14): undefined reference to `boost::system::system_category()' 
CMakeFiles/TorcPause.dir/TorcPause.cpp.o: In function `boost::thread::start_thread()': 
TorcPause.cpp:(.text._ZN5boost6thread12start_threadEv[boost::thread::start_thread()]+0x15): undefined reference to `boost::thread::start_thread_noexcept()' 
CMakeFiles/TorcPause.dir/TorcPause.cpp.o: In function `boost::thread::join()': 
TorcPause.cpp:(.text._ZN5boost6thread4joinEv[boost::thread::join()]+0x6d): undefined reference to `boost::thread::join_noexcept()' 
libTorcIOManager.a(IOManager.cxx.o): In function `__static_initialization_and_destruction_0(int, int)': 
IOManager.cxx:(.text+0x2fd): undefined reference to `boost::system::generic_category()' 
IOManager.cxx:(.text+0x309): undefined reference to `boost::system::generic_category()' 
IOManager.cxx:(.text+0x315): undefined reference to `boost::system::system_category()' 
libTorcIOManager.a(IOManager.cxx.o): In function `boost::system::error_code::error_code()': 
IOManager.cxx:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x17): undefined reference to `boost::system::system_category()' 
libTorcConnection.a(Connection.cxx.o): In function `__static_initialization_and_destruction_0(int, int)': 
Connection.cxx:(.text+0x17c0): undefined reference to `boost::system::generic_category()' 
Connection.cxx:(.text+0x17cc): undefined reference to `boost::system::generic_category()' 
Connection.cxx:(.text+0x17d8): undefined reference to `boost::system::system_category()' 
collect2: ld returned 1 exit status 
make[2]: *** [../bin/TorcPause] Error 1 
make[1]: *** [CMakeFiles/TorcPause.dir/all] Error 2 
make: *** [all] Error 2 

Как вы можете видеть из моего файла CMake Я в том числе библиотеки системы наддува и поэтому я не уверен, что я делаю неправильно или что мне нужно чтобы сделать эту работу должным образом.

Update # 1: В соответствии с поручением здесь выход работает сделать VERBOSE = 1

CMake & make VERBOSE=1 command line output

+2

вывесить выход 'сделать VERBOSE = 1' на http://pastebin.com/, а затем разместить ссылку здесь –

+1

я не знаю много о CMake, но не следует добавлять' LINK_DIRECTORIES (Boost_LIBRARIES) 'или что-то еще? – rodrigo

+0

@ м.с. Я добавил ссылку на исходное описание проблемы. – badrobit

ответ

1

Есть две проблемы:

  1. Your linker invocation показывает, что компоновщик не ищет библиотеки в вашем каталоге специализированных библиотек. Следовательно, вам нужно добавить LINK_DIRECTORIES(${BOOST_LIBRARYDIR})

  2. Кроме того, поскольку Boost_USE_MULTITHREADED включена, многопоточные версии библиотек бустера (libboost_...-mt.a) должны существовать в вашей пользовательской папке библиотеки. Как вы сказали, таких не было, поэтому вам нужно перекомпилировать boost с поддержкой многопоточности.