Позвольте мне быстро решить проблему. У меня есть библиотека "serial", которая зависит от boost, и она настроена в cmake, и у меня есть Findserial.cmake, который устанавливается, чтобы помочь моей второй библиотеке "xbow_400" найти ее. Это все нормально, пока я не попытаюсь скомпилировать «test_xbow_400», который ссылается на «xbow_400», и в этот момент я получаю эту ошибку связывания:
Undefined symbols:
"boost::system::generic_category()", referenced from:
__static_initialization_and_destruction_0(int, int)in test_xbow_400.o
__static_initialization_and_destruction_0(int, int)in test_xbow_400.o
__static_initialization_and_destruction_0(int, int)in libxbow_400.a(xbow_400.o)
__static_initialization_and_destruction_0(int, int)in libxbow_400.a(xbow_400.o)
__static_initialization_and_destruction_0(int, int)in libserial.a(serial.o)
__static_initialization_and_destruction_0(int, int)in libserial.a(serial.o)
"boost::system::system_category()", referenced from:
boost::asio::error::get_system_category() in test_xbow_400.o
__static_initialization_and_destruction_0(int, int)in test_xbow_400.o
boost::asio::error::get_system_category() in libxbow_400.a(xbow_400.o)
__static_initialization_and_destruction_0(int, int)in libxbow_400.a(xbow_400.o)
boost::asio::error::get_system_category() in libserial.a(serial.o)
boost::system::error_code::error_code()in libserial.a(serial.o)
__static_initialization_and_destruction_0(int, int)in libserial.a(serial.o)
ld: symbol(s) not found
Теперь я могу решить эту проблему, добавив эти строки в мой файл CMakeLists.txt для "xbow_400":
+ # Find Boost
+ find_package(Boost COMPONENTS system filesystem thread REQUIRED)
+
+ link_directories(${Boost_LIBRARY_DIRS})
+ include_directories(${Boost_INCLUDE_DIRS})
# Compile the xbow_400 Library
add_library(xbow_400 src/xbow_400.cpp include/xbow_400.h)
- target_link_libraries(xbow_400 ${serial_LIBRARIES})
+ target_link_libraries(xbow_400 ${serial_LIBRARIES} ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY} ${Boost_THREAD_LIBRARY})
НО, я бы хотел, чтобы xbow_400 использовал серийный БЕЗ необходимости специально искать буст и ссылку на него. (Код xbow_400 не включает и не использует boost напрямую, только через последовательную библиотеку).
Возможно ли это? И если да, я должен добавить что-то в Findserial.cmake или я должен изменить способ создания серийного?
Серийная библиотека: https://github.com/wjwwood/serial
xbow_400: https://github.com/wjwwood/Crossbow-IMU400CC-100
Я на OS X 10.6.6. Я еще не пробовал это на Linux или Windows.