Получение ld: символы не найдены для архитектуры x86_64 при компиляции кода cmake

Я пытаюсь скомпилировать пакет ROS, который использует Boost. Код отлично компилируется в Linux, но в OS X я получаю сообщение об ошибке

ld: symbol(s) not found for architecture x86_64

Я установил Boost через brew, и кажется, что он установлен на 64-битной (моя система также 64-битная - OS X 10.9), как запущенная

file libboost_atomic-mt.dylib

выходы

libboost_atomic-mt.dylib: Mach-O 64-bit dynamically linked shared library x86_64

В файле CMakeFiles.txt я пробовал почти все с точки зрения флагов компиляции и компоновки, пробовал -stdlib как libc ++ и как libstdc ++, а также -mmacosx-version-min как все от 10.5 до 10.9. Например, сейчас у меня есть:

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libstdc++ -mmacosx-version-min=10.9")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libstdc++ -mmacosx-version-min=10.9")

Более того, сборка с -m64 приводит к тем же ошибкам, а сборка с -m32 дает те же ошибки, за исключением того, что в ней написано «... архитектура i136».

Следующие бункеры для вставки содержат мой файл CMakefiles.txt и ошибки компиляции соответственно:

http://pastebin.com/0MD8T916 - CMakeFiles.txt

http://pastebin.com/v3vk9i2r - ошибки

У меня заканчиваются идеи, как решить эту проблему ...

Спасибо за помощь!


person presende    schedule 02.04.2014    source источник
comment
Мне кажется, что это не нахождение чего-то внутри ros. Следует ли добавлять ros в target_link_libraries () или это обрабатывается как часть MADP_LIBRARIES?   -  person berkus    schedule 02.04.2014
comment
Это не так. Добавление ROS в target_link_libraries (), похоже, сработало! Большое спасибо!   -  person presende    schedule 02.04.2014
comment
Хорошо, приятно это слышать!   -  person berkus    schedule 03.04.2014


Ответы (1)


Фактически вы не добавляли / не связывали библиотеки ускорения внутри своего проекта.

set(BOOST_COMPONENTS
    unit_test_framework
    program_options
    thread) # And other components you need

set(Boost_USE_STATIC_LIBS ON) # Easier to deploy elsewhere
set(BOOST_ROOT /usr/local/opt/boost) # Useful for boost from brew
set(BOOST_LIBRARYDIR /usr/local/opt/boost/lib64)
find_package(Boost REQUIRED COMPONENTS ${BOOST_COMPONENTS})

include_directories(${Boost_INCLUDE_DIR})

target_link_libraries(<your target> ${Boost_LIBRARIES})
person berkus    schedule 02.04.2014
comment
Спасибо, я попробовал и оставлю, но это не решило проблему, я все равно получаю тот же результат .. - person presende; 02.04.2014