2015-04-02 74 views
0

这是我如何初始化我'libtorrent ::会议SES的变量: EXC_BAD_ACCESS错误

ses(fingerprint("UT", LIBTORRENT_VERSION_MAJOR, 8, 7, 0) 
        , std::make_pair(49152, 65534) 
        , "0.0.0.0" 
        , session::add_default_plugins 
        , alert::progress_notification 

       ) 

然而,我的执行过程中收到EXC_BAD_ACCESS码= 1这条线在会话构造:

init(listen_port_range, listen_interface, print, alert_mask); 

下面是参考init方法的完整源代码,即给误差可以在下面的代码段中找到的行:

  session(fingerprint const& print 
      , std::pair<int, int> listen_port_range 
      , char const* listen_interface = "0.0.0.0" 
      , int flags = start_default_features | add_default_plugins 
      , int alert_mask = alert::error_notification 
      TORRENT_LOGPATH_ARG_DEFAULT) 
     { 
      TORRENT_CFG(); 
      TORRENT_ASSERT(listen_port_range.first > 0); 
      TORRENT_ASSERT(listen_port_range.first < listen_port_range.second); 
      init(listen_port_range, listen_interface, print, alert_mask); 
    #if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING || defined TORRENT_ERROR_LOGGING 
      set_log_path(logpath); 
#endif 
      start(flags); 
     } 

我读过的罪魁祸首可能是一具僵尸,即已经发布了一个变量,但是,我不知道它的初始化过程中,我传递可能已经变量已经发布了,它们对我来说都很好。

问题是,为什么我在我的libtorrent :: session变量的初始化期间收到EXC_BAD_ACCESS错误?

任何提示或建议将不胜感激。

+0

你使用的是什么版本的libtorrent?您发布的错误表明您使用的是Mac OSX,是吗?你是如何构建libtorrent的,你如何构建你的客户端? – Arvid 2015-04-03 15:48:39

+0

我在这个回购中使用libtorrent的版本:https://github.com/joedemo42/popcorntime-ios,上述回购是我正在试图建立的回购。是的,正确的我在Mac OSX上。我自己并没有构建libtorrent,我使用包含在回购库中的libtor.a构建的库,并使用Xcode构建在回购库中找到的客户端。 – Utopianow 2015-04-05 03:41:15

回答

0

确保您没有任何ABI兼容性问题。 libtorrent有很多构建选项会影响其ABI。

如果您将libtorrent构建为共享库,请确保用于构建libtorrent的所有TORRENT_ *定义也提供给包含libtorrent标头的程序。

此问题已在libtorrent 1.0.x中已显著减少,在该版本只有这些定义影响ABI:

  • TORRENT_USE_IPV6
  • TORRENT_NO_DEPRECATE

在早期版本的这些定义也影响ABI:

  • TORRENT_DEBUG
  • TORRENT_DISABLE_DHT
  • TORRENT_VERBOSE_LOGGING
  • TORRENT_LOGGING
  • TORRENT_DISABLE_RESOLVE_COUNTRIES
  • TORRENT_DISABLE_FULL_STATS
  • TORRENT_DISABLE_EXTENSIONS
  • _UNICODE
  • TORRENT_DISABLE_POOL_ALLOCATORS

然而,abi问题应该由缺失的符号检测,其名称包括所有配置选项。 (有关详细信息,请参阅build_config.hpp)。