c++ - OS X 10.8.5 下的 Boost 编译错误

标签 c++ xcode macos boost g++

我在尝试使用 Boost 库 1.34.1 版在 Mac OS X 10.8.5 下编译项目时遇到问题。我正在使用 Xcode 4.6.3 和随附的命令行工具。这一定是一个特定于 OS X 的问题,因为该项目是在 CentOS Linux 下编译的。

我在这里问这个问题是希望有人在 OS X 开发中使用过 Boost 并且可能遇到过类似的问题。

我在下面附上了编译器消息的摘录。我曾尝试使用谷歌搜索错误,但似乎找不到令人满意的答案。如果您能想到一些事情,或者更有可能,如果您需要更多信息(例如,源代码摘录)来帮助我,请告诉我。

非常感谢,

最好的,

塞巴斯蒂安

g++ -DPARC -DCPPPA_EXPORT= -fPIC -fno-common -D__STDC_LIMIT_MACROS -g -fno-inline -Wpointer-arith -Wwrite-strings -Wno-deprecated -Wreturn-type -W -I/usr/local/include  -O2    -I../../src/include -I../../LexBase/src -I/include -I/usr/local/include/boost-1_34_1 -I/Users/sebastiansulger/projects/xle/dev/xfr/src/../../bgdb -Idb_client -I./ -I../include -Ifacts -Irules -Ichoices -Iterms -Imatches -Idriver -Iparser -Itriples -Iprolog -Idebug -Inew_parser -o terms/TermStorage.o  -c terms/TermStorage.cpp
In file included from terms/TermStorage.cpp:9:
In file included from terms/TermStorage.h:28:
In file included from ./Types.h:26:
In file included from /usr/local/include/boost-1_34_1/boost/functional/hash.hpp:10:
/usr/local/include/boost-1_34_1/boost/functional/hash/hash.hpp:487:20: error:
      call to 'hash_value' is ambiguous
            return hash_value(val);
                   ^~~~~~~~~~
/usr/include/c++/4.2.1/ext/hashtable.h:595:16: note: in instantiation of member
      function 'boost::hash<long long>::operator()' requested here
      { return _M_hash(__key) % __n; }
               ^
/usr/include/c++/4.2.1/ext/hashtable.h:587:16: note: in instantiation of member
      function '__gnu_cxx::hashtable<std::pair<const long long, unsigned int>,
      long long, boost::hash<long long>, std::_Select1st<std::pair<const long
      long, unsigned int> >, std::equal_to<long long>, std::allocator<unsigned
      int> >::_M_bkt_num_key' requested here
      { return _M_bkt_num_key(__key, _M_buckets.size()); }
               ^
/usr/include/c++/4.2.1/ext/hashtable.h:522:18: note: in instantiation of member
      function '__gnu_cxx::hashtable<std::pair<const long long, unsigned int>,
      long long, boost::hash<long long>, std::_Select1st<std::pair<const long
      long, unsigned int> >, std::equal_to<long long>, std::allocator<unsigned
      int> >::_M_bkt_num_key' requested here
        size_type __n = _M_bkt_num_key(__key);
                        ^
/usr/include/c++/4.2.1/ext/hash_map:219:22: note: in instantiation of member
      function '__gnu_cxx::hashtable<std::pair<const long long, unsigned int>,
      long long, boost::hash<long long>, std::_Select1st<std::pair<const long
      long, unsigned int> >, std::equal_to<long long>, std::allocator<unsigned
      int> >::find' requested here
      { return _M_ht.find(__key); }
                     ^
terms/TermStorage.h:97:46: note: in instantiation of member function
      '__gnu_cxx::hash_map<long long, unsigned int, boost::hash<long long>,
      std::equal_to<long long>, std::allocator<unsigned int> >::find' requested
      here
      TsHashMapIter iter = mParent->mHashMap.find(t);
                                             ^
terms/TermStorage.cpp:85:47: note: in instantiation of member function
      'powerset::xfr::TermHashStorage<long long>::hashInsert' requested here
  uint32_t index = (uint32_t) mIntTermStorage.hashInsert(intVal);
                                              ^
/usr/local/include/boost-1_34_1/boost/functional/hash/hash.hpp:105:24: note:
      candidate function
    inline std::size_t hash_value(int v)
                       ^
/usr/local/include/boost-1_34_1/boost/functional/hash/hash.hpp:110:24: note:
      candidate function
    inline std::size_t hash_value(unsigned int v)
                       ^
/usr/local/include/boost-1_34_1/boost/functional/hash/hash.hpp:115:24: note:
      candidate function
    inline std::size_t hash_value(long v)
                       ^
/usr/local/include/boost-1_34_1/boost/functional/hash/hash.hpp:120:24: note:
      candidate function
    inline std::size_t hash_value(unsigned long v)
                       ^
/usr/local/include/boost-1_34_1/boost/functional/hash/hash.hpp:229:24: note:
      candidate function
    inline std::size_t hash_value(float v)
                       ^
/usr/local/include/boost-1_34_1/boost/functional/hash/hash.hpp:234:24: note:
      candidate function
    inline std::size_t hash_value(double v)
                       ^
/usr/local/include/boost-1_34_1/boost/functional/hash/hash.hpp:239:24: note:
      candidate function
    inline std::size_t hash_value(long double v)
                       ^
1 error generated.
make[1]: *** [terms/TermStorage.o] Error 1
make: *** [build] Error 2
Sebastian-Sulgers-MacBook-Pro:dev sebastiansulger$ 

编辑:我注意到 boost/functional/hash/hash.hpp 包括以下内容:

#if defined(BOOST_HAS_LONG_LONG) && defined(_M_X64) && defined(_WIN64)
    // On 64-bit windows std::size_t is a typedef for unsigned long long, which
    // isn't due to be supported until Boost 1.35. So add support here.
    // (Technically, Boost.Hash isn't actually documented as supporting
    // std::size_t. But it would be pretty silly not to).
    std::size_t hash_value(long long);
    std::size_t hash_value(unsigned long long);
#endif

所以看起来类型的定义在那里,但不适用于我的系统。这有任何意义吗?我能以某种方式规避这个吗?

最佳答案

它基本上是说 hash.hpp 中有很多 hash_value 函数,但它们都不适用于您的哈希表中的类型(显然是 long long)。

您的工具对于该类型来说太旧了,或者您没有为编译器使用正确的 -std=... 参数进行编译。

关于c++ - OS X 10.8.5 下的 Boost 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33238592/

相关文章:

Vector 容器中的 C++ 智能指针

c++ - OpenCL:返回 std::future 而不是使用 clFinish 进行阻塞

ios - 为 xcode 项目设置默认字体样式、颜色和大小

linux - Bash:检测所有磁盘并显示可用空间

c++ - C++ 中的基本 GUI 功能

c++ - 使用 std::unique_ptr/std::shared_ptr const 正确组合

ios - 如何在模拟器上发布 UIAccessibility 公告?

iphone - 没有配备兼容 iOS 版本的已配置 iOS 设备 - 所提供的答案均无济于事

java - 我想让我的 java 程序在 Windows 的任务栏和 Mac 的 Dock 中都有一个图标

python - 我正在做一个 Tkinter 项目,我无法调整按钮的高度