【问题标题】:Compiling frameworks(cppunit, boost, ++) from terminal to work with Xcode 4.6从终端编译框架(cppunit、boost、++)以使用 Xcode 4.6
【发布时间】:2013-05-28 06:39:19
【问题描述】:

我正在尝试在 Xcode 4.6.2 中使用一些框架。 当我尝试不同的构建设置时,应该在我的项目中编译和链接到的 C++ 框架(例如 cppunit 和 boost)总是以“架构 x86_64 [...] 的未定义符号”或 i386 失败。 /p>

我尝试使用各种 cpu 架构标志(64、32 和 32_64)将编译器设置为 clang 和 g++。我已经到了靠自己找不到任何解决方案的地步。

我也尝试了故障安全包,但没有任何运气:
冲泡安装 cppunit 通用
端口安装 cppunit +universal (也没有成功的 Boost 库)

此外,已经完成了很多关于 Boost 的尝试。在过去的 24 小时里,Bjam 确实做了很多工作。已尝试多种设置:
http://www.codeproject.com/Tips/555070/Boost-vs-OSX-iOS-XCode
http://boost.2283326.n4.nabble.com/Errors-compiling-Boost-Log-on-OS-X-tp4646151p4646299.html
更多的是我自己的纯试验和错误。

所以我的问题是:编译器和链接器的组合以及我应该使用哪些标志才能使其在我的 Xcode 项目中工作?

根据 Captain Obvlious 的要求,以下是使用 Boost::Test 运行应用程序时出现的一些错误:

Undefined symbols for architecture x86_64:
  "boost::test_tools::tt_detail::check_impl(boost::test_tools::predicate_result const&, boost::unit_test::lazy_ostream const&, boost::unit_test::basic_cstring<char const>, unsigned long, boost::test_tools::tt_detail::tool_level, boost::test_tools::tt_detail::check_type, unsigned long, ...)", referenced from:
      my_test::test_method() in main.o
  "boost::unit_test::unit_test_log_t::set_checkpoint(boost::unit_test::basic_cstring<char const>, unsigned long, boost::unit_test::basic_cstring<char const>)", referenced from:
      my_test::test_method() in main.o
  "boost::unit_test::framework::master_test_suite()", referenced from:
      init_unit_test_suite(int, char**) in main.o
  "boost::unit_test::test_case::test_case(boost::unit_test::basic_cstring<char const>, boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&)", referenced from:
      boost::unit_test::make_test_case(boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&, boost::unit_test::basic_cstring<char const>) in main.o
  "boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::test_case*, unsigned long)", referenced from:
      ___cxx_global_var_init2 in main.o
  "boost::unit_test::ut_detail::normalize_test_case_name(boost::unit_test::basic_cstring<char const>)", referenced from:
      boost::unit_test::make_test_case(boost::unit_test::callback0<boost::unit_test::ut_detail::unused> const&, boost::unit_test::basic_cstring<char const>) in main.o
  "vtable for boost::unit_test::unit_test_log_t", referenced from:
      boost::unit_test::unit_test_log_t::unit_test_log_t() in main.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

【问题讨论】:

  • 包含一些错误会很有帮助,这样我们就知道哪些符号是未定义的。
  • 你能解决问题吗?我也处于同样的困境中。正在使用基于 Peter Goodliffe 的脚本的 boost.framework (1.53.0)。

标签: c++ xcode boost compiler-construction linker


【解决方案1】:

您需要在项目的构建阶段通过“将二进制文件与库链接”添加这些函数所依赖的库。但是,这会带来可怕的 EXC_BAD_ACCESS,您可以在 Stack 的其他地方阅读到。

【讨论】:

    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多