在编译cmake代码时获取“ld:未找到架构x86_64的符号”

时间:2014-04-02 18:05:17

标签: c++ macos boost cmake ros

我正在尝试编译一个使用Boost的ROS包。代码在Linux上编译得很好,但在OS X上我收到了错误

ld: symbol(s) not found for architecture x86_64

我通过brew安装了Boost,它似乎安装在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构建会产生相同的错误,除非它显示“... architecture i136”。

以下粘贴区分别包含我的CMakefiles.txt和编译错误:

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

http://pastebin.com/v3vk9i2r - 错误

我没有解决这个问题的想法......

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您实际上没有在项目中添加/链接boost库。

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})