【问题标题】:Boost Multiprecision symbols not found during linking with Accumulator与累加器链接期间未找到提升多精度符号
【发布时间】:2021-04-04 14:39:48
【问题描述】:

您好,我正在使用带有 Boost 累加器的 Boost 多精度库。当我与 CMakeLists 链接时,它给了我一个参考问题

Undefined symbols for architecture x86_64:
  "___gmpf_add", referenced from:
      void boost::multiprecision::backends::eval_add<50u, 50u>(boost::multiprecision::backends::gmp_float<50u>&, boost::multiprecision::backends::gmp_float<50u> const&) in historicQuotePropogationController.cpp.o
  "___gmpf_clear", referenced from:
      boost::multiprecision::backends::detail::gmp_float_imp<50u>::~gmp_float_imp() in historicQuotePropogationController.cpp.o
  "___gmpf_get_prec", referenced from:
      boost::multiprecision::backends::detail::gmp_float_imp<50u>::gmp_float_imp(boost::multiprecision::backends::detail::gmp_float_imp<50u> const&) in historicQuotePropogationController.cpp.o
  "___gmpf_init2", referenced from:
      boost::multiprecision::backends::gmp_float<50u>::gmp_float() in historicQuotePropogationController.cpp.o
      boost::multiprecision::backends::detail::gmp_float_imp<50u>::gmp_float_imp(boost::multiprecision::backends::detail::gmp_float_imp<50u> const&) in historicQuotePropogationController.cpp.o
  "___gmpf_mul", referenced from:
      void boost::multiprecision::backends::eval_multiply<50u, 50u, 50u>(boost::multiprecision::backends::gmp_float<50u>&, boost::multiprecision::backends::gmp_float<50u> const&, boost::multiprecision::backends::gmp_float<50u> const&) in historicQuotePropogationController.cpp.o
  "___gmpf_set", referenced from:
      boost::multiprecision::backends::detail::gmp_float_imp<50u>::gmp_float_imp(boost::multiprecision::backends::detail::gmp_float_imp<50u> const&) in historicQuotePropogationController.cpp.o
ld: symbol(s) not found for architecture x86_64

这是我正在使用的类

    class StatsControllerManager {
    public:
        bool propogateNewStats(Model::Stat stats);
        vector<Model::Stat> propogateNewStats(vector<Model::Stat> stats);
    private:
        void initialize(std::string name, bool backpopulate = false);
        std::unordered_map<std::string, Controller> historicStats;
    };

谁能帮我指出正确的方向?

【问题讨论】:

  • 看起来 boost 正在使用 GMP 库,您是否也与该库相关联?

标签: c++ boost


【解决方案1】:

取决于您需要使用的类型

  • libgmp
  • libmpfr

链接。见https://www.boost.org/doc/libs/1_75_0/libs/math/doc/html/math_toolkit/high_precision/use_mpfr.html

这些非常普遍,但如果您不想依赖依赖,则可以使用 cpp_* 类型(cpp_int、cpp_bin_float、cpp_dec_float),它们几乎是直接替代品,因为所有这些后端都使用相同的前端(number&lt;&gt;)。再次:docs:

最后四个有一些许可限制;只要 Boost.Multiprecision 使用 cpp_float 后端时可以提供 无限制的 Boost 许可证。

目前,免费许可的价格略低。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多