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开发人员命令提示行编译。
- 使用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 - 使用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>
欢迎关注本人公众号,公众号会更新一些不一样的内容,相信一定会有所收获。