Apple Mach-O Linker (ld) 错误.ld: -r 和 -dead-strip 不能一起使用

Apple Mach-O Linker (ld) Error. ld: -r and -dead-strip cannot be used together

本文关键字:ld 不能 -dead-strip 一起 Linker Mach-O 错误 Apple      更新时间:2023-10-16

XCode 5.0.1 在成功编译 161 个C++项目文件后给我一个错误。有很多苹果Mach-O链接器错误问题,但没有一个帮助我。

错误消息如下:

ld: -r and -dead_strip cannot be used together
clang: error: linker command failed with exit code 1
 (use -v to see invocation)

我的生成设置中的链接部分如下图所示:

XCode 5.0.1 的链接器部分

任何人都可以告诉我如何解决此错误吗?

更新

当我Dead Code Stripping设置为No时,我得到 19 个链接错误。 Mach-O Type设置为ReleaseDebugDynamic Library。这种情况中的错误如下:

Undefined symbols for architecture x86_64:
      "boost::re_detail_106000::perl_matcher<__gnu_cxx::__normal_iterator<wchar    _t const*, std::basic_string<wchar_t, std::char_traits<wchar_t>,     std::allocator<wchar_t> > >,     std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<wchar_t     const*, std::basic_string<wchar_t, std::char_traits<wchar_t>,     std::allocator<wchar_t> > > > >, boost::regex_traits<wchar_t,     boost::cpp_regex_traits<wchar_t> >     >::construct_init(boost::basic_regex<wchar_t,     boost::regex_traits<wchar_t, boost::cpp_regex_traits<wchar_t> > > const&,     boost::regex_constants::_match_flags)", referenced from:
      boost::re_detail_106000::perl_matcher<__gnu_cxx::__normal_iterator<wchar_    t const*, std::basic_string<wchar_t, std::char_traits<wchar_t>,      std::allocator<wchar_t> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<wchar_t const*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > > >, boost::regex_traits<wchar_t, boost::cpp_regex_traits<wchar_t> > >::perl_matcher(__gnu_cxx::__normal_iterator<wchar_t const*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, __gnu_cxx::__normal_iterator<wchar_t const*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, boost::match_results<__gnu_cxx::__normal_iterator<wchar_t const*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<wchar_t const*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > > > > >&, boost::basic_regex<wchar_t, boost::regex_traits<wchar_t, boost::cpp_regex_traits<wchar_t> > > const&, boost::regex_constants::_match_flags, __gnu_cxx::__normal_iterator<wchar_t const*, std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > >) in AdWrksTagDataFactory.o

和错误消息如下:

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

在一些类似的问题中,我看到这可能是由于多个版本的 Boost 造成的,但我已经检查过了。

只需将Dead Code Stripping设置为 No 即可。当此选项设置为 Yes Xcode 将在链接期间添加 -dead_strip 标志,这在链接可重定位二进制文件时不受支持