C++ libtorrent::session初始化期间出现EXC_BAD_访问错误
以下是我初始化'libtorrent::session ses'变量的方式: 但是,在会话构造函数中执行此行时,我收到一个EXC_BAD_ACCESS code=1: 以下是init方法的完整源代码供参考,给出错误的行可以在以下代码段中找到: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
会话(指纹常量和打印)
,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__反对
- 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);
}