1. 简介

  libtorrent源码结构较为复杂而且内容极多,从微观开始一点点研究很容易迷失了方向,比较合适的方式是先跑测试代码,再逐步调试的过程中熟悉每个部分的源码,由此入手可以较为轻松。本文记录libtorrent在windows平台的编译经验。
  libtorrent依赖OpenSSL和boost库,首先要编译Openssl和boost库。在之前已经总结过openssl的编译,因此这里不做重复说明。

2. 编译Boost库

(1) 解压(例解压到:G:/)。

(2) 打开 Visual Studio 2017->Visual Studio tools ->VS2017 开发人员命令提示,cd 到boost解压后的根目录(例:G:/boost_1_68_0)。

(3) 执行G:/boost_1_68_0/tools/build下的booststrap.bat。完成后会在该目录下生成:b2.exe,bjam.exe,project-config.jam。将b2.exe和bjam.exe复制至boost_1_68_0目录下,用于编译。

(4) 使用bjam命令可以将release和debug一起编译生成:

bjam --toolset=msvc-14.1 --without-python --build-type=complete  link=shared  threading=multi install

3. 编译libtorrent库

  libtorrent是一个开源bt库,它将meta文件生成,hash生成,下载文件, 网络连接等操作封装成接口,供别人调用,并且都有很好的性能与稳定性。它大量使用了boost库的东西,并且还使用了openssl。
关于libtorrent的编译,这里提供两种方式,分别是在VS2017中添加源文件后编译静态库以及使用VS2017开发人员命令提示行编译。

  1. 使用VS2017命令行编译
    (1) 复制b2.exe和bjam.exe至libtorrent目录
    (2) 打开VS2017开发人员命令提示行,进入libtorrent所在目录
    (3) 设置依赖库boost的位置,如
    set BOOST_ROOT=G:/boost_1_68_0/;
    (4) 使用bjam编译
    bjam msvc-14.1 link=static runtime-link=static
    (5) 成功编译会在bin目录下生成libtorrent.lib
  2. 使用VS2017编译
    (1) 建立lib空项目
    (2) 将libtorrent中include/libtorrent, ed25519, src目录下(包括子文件夹)除了ed25519下的test.cpp以外所有源文件添加进来
    (3) 设置VC++的包含目录和库目录,包括OpenSSL、boost和libtorrent三个
    (4) 添加预处理器命令,包括:
    NDEBUG
    _LIB
    WIN32
    WIN32_LEAN_AND_MEAN
    _WIN32_WINNT=0x0500
    _CRT_SECURE_NO_DEPRECATE
    UNICODE
    BOOST_ASIO_HASH_MAP_BUCKETS=1021
    BOOST_FILESYSTEM_VERSION=2
    WITH_SHIPPED_GEOIP_H
    BOOST_ASIO_SEPARATE_COMPILATION
    BOOST_ASIO_ENABLE_CANCELIO
    TORRENT_USE_TOMMATH
    _WINSOCK_DEPRECATED_NO_WARNINGS
    _SCL_SECURE_NO_WARNINGS
    (5) 生成解决方案

4. 关于libtorrent的使用问题

在使用libtorrent的示例时,会需要和上文一样,添加VC++包含目录和库目录、预处理器命令,以及链接器的输入。
在使用example文件夹下的示例时,可能会遇到即使添加所有的lib之后依然报错缺少依赖项。若缺少的和boost::asio相关,则这种情况下可以通过手动在源文件开始时加入下面包含语句解决:
#include <boost/asio/impl/src.hpp>


欢迎关注本人公众号,公众号会更新一些不一样的内容,相信一定会有所收获。

libtorrent源码分析(二)VS上libtorrent编译总结相关推荐

  1. 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )

    Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...

  2. HBase源码分析之HRegion上compact流程分析(三)

    在<HBase源码分析之HRegion上compact流程分析(二)>一文中,我们没有讲解真正执行合并的CompactionContext的compact()方法.现在我们来分析下它的具体 ...

  3. SpringBoot源码分析(二)之自动装配demo

    SpringBoot源码分析(二)之自动装配demo 文章目录 SpringBoot源码分析(二)之自动装配demo 前言 一.创建RedissonTemplate的Maven服务 二.创建测试服务 ...

  4. 【投屏】Scrcpy源码分析二(Client篇-连接阶段)

    Scrcpy源码分析系列 [投屏]Scrcpy源码分析一(编译篇) [投屏]Scrcpy源码分析二(Client篇-连接阶段) [投屏]Scrcpy源码分析三(Client篇-投屏阶段) [投屏]Sc ...

  5. ENS最新合约源码分析二

    ENS(以太坊域名服务)智能合约源码分析二 0.简介 ​ 本次分享直接使用线上实际注册流程来分析最新注册以太坊域名的相关代码.本次主要分析最新的关于普通域名注册合约和普通域名迁移合约,短域名竞拍合约不 ...

  6. gSOAP 源码分析(二)

    gSOAP 源码分析(二) 2012-5-24 flyfish 一 gSOAP XML介绍 Xml的全称是EXtensible Markup Language.可扩展标记语言.仅仅是一个纯文本.适合用 ...

  7. Android Q 10.1 KeyMaster源码分析(二) - 各家方案的实现

    写在之前 这两篇文章是我2021年3月初看KeyMaster的笔记,本来打算等分析完KeyMaster和KeyStore以后再一起做成一系列贴出来,后来KeyStore的分析中断了,这一系列的文章就变 ...

  8. Nouveau源码分析(二):Nouveau结构体的基本框架

    Nouveau源码分析(二) 在讨论Nouveau对Nvidia设备的初始化前,我准备先说一下Nouveau结构体的基本框架 Nouveau的很多结构体都可以看作是C++中的类,之间有很多相似的东西, ...

  9. Vue.js 源码分析(二十三) 指令篇 v-show指令详解

    v-show的作用是将表达式值转换为布尔值,根据该布尔值的真假来显示/隐藏切换元素,它是通过切换元素的display这个css属性值来实现的,例如: <!DOCTYPE html> < ...

  10. Docker源码分析(二):Docker Client创建与命令执行

    http://www.infoq.com/cn/articles/docker-source-code-analysis-part2 1. 前言 如今,Docker作为业界领先的轻量级虚拟化容器管理引 ...

最新文章

  1. 1.5 Kali Linux策略
  2. 为什么JS是单线程?JS中的Event Loop(事件循环)?JS如何实现异步?setimeout?
  3. 中国水产饲料市场发展深度调研及十四五前景预测报告2022年版
  4. 学籍管理系统 c++作业
  5. 经典数值优化算法--专题学习
  6. 限时购校验小工具dubbo异步调用实现限
  7. 一个简单的Blob存取例子
  8. ssh 执行 SSH2_MSG_SERVICE_ACCEPT 慢问题
  9. redis lettuce 超时_Spring Cache 操作 Redis 实现数据缓存(上)
  10. Django 【第一篇】基础
  11. 【Codeforces 404C】Restore Graph
  12. 由线性空间V中的集合生成的子空间
  13. RTI_DDS自定义插件开发 1
  14. 已知平面上两点坐标及半径,求过两点圆弧的圆心坐标
  15. 2020-12.24 用SURF实现简易的两张图像拼接
  16. 社科研究中的问卷设计详解——结合论文具体例子来看
  17. 开源框架Volley的使用《一》
  18. 用Python 80行代码实现一个微信消息撤回捕捉功能
  19. 【C++ 程序】 TVJ Complex Calculator (v 2.2) 复数计算器
  20. MySQL-数据查询语言(DQL)

热门文章

  1. 计算机ppt咋弄,ppt打不开怎么办?教您详细解决方法
  2. 网络与信息安全应急处置预案
  3. 数据结构-线性链表的实现和应用
  4. 产品经理需要NPDP证书吗?
  5. 如何制作一份高大上的学术PPT?
  6. 使用torch.nn.BatchNorm1d出现Tensor for argument #2 ‘weight‘ is on CPU, but expected it to on GPU错误
  7. 苹果11蓝牙配对不成功怎么办_蓝牙配对不成功怎么办,苹果手机蓝牙配对不成...
  8. 兄弟打印机打印时显示服务器内部错误,打印机出现内部错误无法打印什么原因...
  9. GO语言+区块链视频教程,GO语言+区块链学习线路图(含大纲+视频+资料)
  10. C语言学习-翁凯(第八章笔记)