0

这就是我初始化“libtorrent::session ses”变量的方式:

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 code=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 错误?

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

4

1 回答 1

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)。

于 2015-04-03T15:47:55.043 回答