libtorrent::session 初始化期间的 EXC_BAD_ACCESS 错误

Posted

技术标签:

【中文标题】libtorrent::session 初始化期间的 EXC_BAD_ACCESS 错误【英文标题】:EXC_BAD_ACCESS error during init of libtorrent::session 【发布时间】:2015-04-02 23:56:42 【问题描述】:

这就是我初始化“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 方法的完整源代码供参考,给出错误的行可以在以下 sn-p 中找到:

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

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

【问题讨论】:

您使用的是什么版本的 libtorrent?您发布的错误表明您使用的是 Mac OSX,对吗?您是如何构建 libtorrent 以及如何构建客户端的? 我在这个 repo 中使用 libtorrent 的版本:github.com/joedemo42/popcorntime-ios,前面提到的 repo 是我正在尝试构建的。是的,正确我在 Mac OSX 上。我自己没有构建 libtorrent,我使用了包含在 repo 中的 libtor.a 构建库,并且我正在使用 Xcode 构建在 repo 中找到的客户端。 【参考方案1】:

确保您没有任何 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)。

【讨论】:

以上是关于libtorrent::session 初始化期间的 EXC_BAD_ACCESS 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 MSVS 2013 中使用 libtorrent

在静态初始化期间运行代码

在swift初始化期间使用枚举设置属性

初始化期间未使用我的方法的调用结果

初始化期间可编码的默认值

启动层初始化期间发生错误 - Eclipse Java