【问题标题】:Getting "ld: symbol(s) not found for architecture x86_64" when compiling cmake code编译 cmake 代码时获取“ld:未找到架构 x86_64 的符号”
【发布时间】:2014-04-02 18:05:16
【问题描述】:

我正在尝试编译一个使用 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 构建会产生相同的错误,只是它显示“...架构 i136”。

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

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

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

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

感谢您的帮助!

【问题讨论】:

  • 在我看来,它没有在 ros 中找到任何东西。您应该将 ros 添加到 target_link_libraries() 还是作为 MADP_LIBRARIES 的一部分处理?
  • 不是。将 ROS 添加到 target_link_libraries() 似乎有效!非常感谢!
  • 好的,很高兴听到这个消息!

标签: c++ macos boost cmake ros


【解决方案1】:

您实际上并未在项目中添加/链接 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})

【讨论】:

  • 谢谢,我试过了,会留下来,但它并没有真正解决问题,我仍然得到完全相同的输出..
猜你喜欢
  • 2016-12-09
  • 1970-01-01
  • 2013-11-18
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
相关资源
最近更新 更多