C++ libtorrent::session初始化期间出现EXC_BAD_访问错误

C++ libtorrent::session初始化期间出现EXC_BAD_访问错误,c++,session,exc-bad-access,libtorrent,C++,Session,Exc Bad Access,Libtorrent,以下是我初始化'libtorrent::session ses'变量的方式: 但是,在会话构造函数中执行此行时,我收到一个EXC_BAD_ACCESS code=1: 以下是init方法的完整源代码供参考,给出错误的行可以在以下代码段中找到: 会话(指纹常量和打印) ,std::对侦听端口范围 ,char const*listen_interface=“0.0.0.0” ,int flags=start_default_features | add_default_plugins ,int

以下是我初始化'libtorrent::session ses'变量的方式:

但是,在会话构造函数中执行此行时,我收到一个EXC_BAD_ACCESS code=1:

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

会话(指纹常量和打印)
,std::对侦听端口范围
,char const*listen_interface=“0.0.0.0”
,int flags=start_default_features | add_default_plugins
,int alert\u mask=alert::error\u通知
TORRENT_日志路径_参数_默认值)
{
TORRENT_CFG();
TORRENT\u断言(侦听\u端口\u range.first>0);
TORRENT\u ASSERT(listen\u port\u range.first
我已经读到,罪魁祸首可能是一个僵尸,即一个已经释放的变量,但是,我不确定我在初始化期间传递的那些变量中的哪些可能已经释放,它们对我来说都很好

问题是,为什么我在初始化libtorrent::session变量时收到EXC_BAD_访问错误


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

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

如果要将libtorrent构建为共享库,请确保还向程序提供了用于构建libtorrent的所有TORRENT_*定义,包括libtorrent头

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

  • TORRENT_使用IPV6
  • TORRENT_NO__反对
在早期版本中,这些定义也会影响ABI:

  • TORRENT_调试
  • TORRENT\u禁用\u DHT
  • TORRENT\u详细记录
  • TORRENT_测井
  • TORRENT\u禁用\u解决\u国家/地区
  • TORRENT\u禁用\u完整\u统计信息
  • TORRENT\u禁用\u扩展
  • _统一码
  • TORRENT\u禁用\u池\u分配器

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

您使用的是哪个版本的libtorrent?您发布的错误表明您使用的是Mac OSX,对吗?您是如何构建libtorrent的?您是如何构建您的客户机的?我在这个repo中使用libtorrent的版本:,前面提到的repo就是我正在尝试构建的。是的,没错,我用的是Mac OSX。我不是自己构建libtorrent的,我使用的是libtor。一个包含在repo中的构建库,我使用Xcode来构建在repo中找到的客户端。
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

                  )
init(listen_port_range, listen_interface, print, alert_mask);
            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);
        }