初始化libtorrent::会话期间出现EXC_BAD_ACCESS错误

EXC_BAD_ACCESS error during init of libtorrent::session

本文关键字:EXC BAD ACCESS 错误 libtorrent 会话 初始化      更新时间:2023-10-16

这就是我初始化"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代码=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错误?

如有任何提示或建议,我们将不胜感激。

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

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

这个问题在libtorrent.0.x中已经显著减少,在那个版本中,只有这些定义会影响ABI:

  • TORRENT_USE_IPV6
  • 种子_不弃用

在早期版本中,这些定义也会影响ABI:

  • 种子_DEBUG
  • TORRENT_DISABLE_DHT
  • TORRENT_VERBOSE_LOGGING
  • 种子日志
  • TORRENT_DISABLE_RESOLVE_COUNTRIES
  • TORRENT_DISABLE_FULL_STATS
  • TORRENT_DISABLE_EXTENSIONS
  • _UNICODE
  • TORRENT_DISABLE_POOL_allocaters

然而,abi问题应该是由一个丢失的符号检测到的,该符号的名称包括所有配置选项。(详见build_config.hpp)。