网上可参考的文章已经有很多很详细了,主要参考:

http://hi.baidu.com/chinacharis/blog/item/f58bef76e02ede12b051b92a.html 编译openssl

http://hi.baidu.com/chinacharis/blog/item/1725d1dc9cc3c03d5982ddfc.html 编译boost
http://www.boost.org/doc/libs/1_39_0/more/getting_started/windows.html 编译boost boost.org 1.39.0版本的英文参考

http://hi.baidu.com/chinacharis/blog/item/7debed65c72917f9f7365413.html 编译libtorrent

但是有些需要自己注意的地方:

编译boost 的时候:

  • 出现error,修改了ms目录下的ntdll.mak文件,把-w3修改为-w0

编译libtorrent的时候:

  • 报错1:GeoIP.c :没找到"libtorrent/GeoIP.cpp" ,增加预处理器定义:WITH_SHIPPED_GEOIP_H
  • 报错2: \boost_1_39_0\boost\asio\ssl\detail\openssl_context_service.hpp(74) : error C2440: “=”: 无法从“const SSL_METHOD *”转换为“SSL_METHOD *” 所以我将openssl_context_service.hpp中的那个变量声明前加了const修饰符( const ::SSL_METHOD* ssl_method = 0;),编译就通过了

编译通过生成exe成功。

运行时报错:找不到:libeay32.dll ssleay32.dll,于是 添加 libeay32.dll ssleay32.dll ,openssl.exe 放到exe同样的目录下。

使用release 版本,之前用debug 弄了几天都是运行时抛出异常,具体如下:

  • 有时文件作为输入参数时,只是输出文件名,然后退出。
  • 文件夹作为输入参数时,抛出异常,输出come to error,然后退出。
  • debug 版本在make_torrent的example 的 addfile 出错,最终跳到boost 的filesystem的源码里面(有时是is_directory函数)

路径含有中文是会出错的, http://www.cppblog.com/hblhs/archive/2008/10/21/64597.html给出了解决方案(但经测试,不完全正确,需要做以下更改)

View Code

std::wstring safe_convert(std::string const& s)
 {
  /*try
  {
   return libtorrent::utf8_wchar(s);
  }
  catch (std::exception)
  {
   std::wstring ret;
   const char* end = &s[0] + s.size();
   for (const char* i = &s[0]; i < end;)
   {
    wchar_t c = '.';
    int result = std::mbtowc(&c, i, end - i);
    if (result > 0) i += result;
    else ++i;
    ret += c;
   }
   return ret;
  }*///wchar_t wc;
  wchar_t *wcs = new wchar_t[s.size()];
  
  setlocale(LC_CTYPE, "chs");  //原setlocale(LC_CTYPE, ""); 
 
  mbstowcs(wcs, s.c_str(), s.size() + 1); //参考的文章缺少这个+1
 
  std::wstring newword(wcs);

delete[] wcs;
  return newword;
 }

参考 http://www.cppblog.com/kenwell/archive/2008/05/21/50661.html 经较多测试,使用以下较好:

View Code

std::wstring s2ws(const std::string& s)
{
    setlocale(LC_ALL, "chs"); 
    const char* _Source = s.c_str();
    size_t _Dsize = s.size() + 1;
    wchar_t *_Dest = new wchar_t[_Dsize];
    wmemset(_Dest, 0, _Dsize);
    mbstowcs(_Dest,_Source,_Dsize);
    std::wstring result = _Dest;
    delete []_Dest;
    setlocale(LC_ALL, "C");
    return result;
}

将以上的实现替换掉storage.cpp 的safe_convert

其评论也有个更 简洁的,但未测试:

更简洁的版本

string a = "xxxx";
wstring b(a.begin(), a.end());

其他如参考所言网页

采用的环境

boost_1_39_0
libtorrent-rasterbar-0.14.4
Unicode编码环境
vs 2008
win 2003 server sp2
我使用的是make_torrent  的实例代码

然后一切就绪。

测试运行:

T_libTorrent.exe c:\1.torrent http:192.168.2.41:6969/announce d:\testtorrent

生成成功,bitcomet成功解析,bnbt成功接收,2台机器成功互传数据。

转载于:https://www.cnblogs.com/no7dw/archive/2011/09/15/2177910.html

vs2008 编译libtorrent相关推荐

  1. VS2008编译汇编程序的问题

    在VS2008 pro里已经集成了MASM,经过相关设置后,编译出了程序,但是执行后,说少msvcr90.dll 39944 然后自己写了个C的程序在DEPEND中对比了下两个的导入表. 39946 ...

  2. VS2008编译错误:error PRJ0003 生成 cmd.exe 时出错

    在用VS2008编译C++程序的时候发现以下错误: error PRJ0003  生成 cmd.exe 时出错 其实意思就是找不到cmd.exe,我觉得,其原因是VS2008里的有些环境变量设置不对或 ...

  3. VS2008编译RPC idl文件(支持.ACF文件)

    1.命令行编译: 使用vc的Microsoft Visual Studio\VC98\Bin\下的MIDL.EXE进行编译(命令行编译时会自动添加.ACF文件进行编译): midl hello.idl ...

  4. vs2008编译中文变量名的lua解释器环境

    0.下载llex.c(此文件是解析变量名的)当然可以自己根据网上的资料改,我是从CSDN下载的一个包里取出来的[当然也可以直接照第3步的方法编译此包,也可以编译成功,之前直接运行包中的lua.exe老 ...

  5. win7 VS2008 编译luabind-0.9.1 动态库 静态库

    一 luabind下载 luabind-0.9.1 下载地址 :http://download.csdn.net/download/yzf279533105/10109861 二  Windows下编 ...

  6. VS2008编译boost库

    一.下载 首先从boost官方主页http://www.boost.org/下载最新版boost安装包,我用的版本是boost.1.49.0 二.新建文件夹 如果是使用下载的安装包,那么请将boost ...

  7. 【原】解决VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题...

    --更新于2011/4/19,针对最新的VS2008补丁,VS2005/2010同样适用. VC9编译的程序在没有装过VC9(确切的说是.Net Framework3.5)的机器上运行时,如果提示&q ...

  8. 在windows使用vs2008编译live555

    1.live555源代码简介 liveMedia项目的源代码包括四个基本的库,各种测试代码以及IVE555 Media Server. 四个基本的库分别是UsageEnvironment&Ta ...

  9. Vs2008编译vtk5.10详细教程

    1)  官网下载vtk源文件和数据文件解压到同一文件夹 2)  下载cmake编译软件 3)  用cmake编译安装VTK a.      选择vtk源代码路径和编译文件保存路径 b.      点击 ...

最新文章

  1. notepad++及Scintilla
  2. ipad无法与itunes同步,提示因为这台电脑不再被授权使用在此ipad上购买的项目解决方案...
  3. 谷歌发布 RLDS,在强化学习生成、共享和使用数据集
  4. nginx 负载均衡配置_LINUX系统nginx负载均衡配置
  5. JQuery官方学习资料(译):$( document ).ready()
  6. export default 和export 的区别
  7. 为什么有些美国人名字仅仅只是两个英文字母(并不是缩写)?
  8. 浅谈OpenCV[轉]
  9. ora-01092: oracle 实例终止.强制断开连接,undo表空间故障特殊恢复(二)------ORA-01092: ORACLE 实例终止。强制断开连接...
  10. printf的格式控制的完整格式
  11. ccleaner的专业版和商业版的注册码
  12. python12306源码_Python动刷新抢12306火车票的代码(附源码)
  13. gflags 调试内存_gflags 检查内存越界 | 学步园
  14. Win11如何设置默认浏览器 win11设置默认浏览器的步骤方法
  15. Kubernetes---Secret配置管理
  16. 向大家推荐一下我的笔记APP『百灵』,里面有丰富的面试资料
  17. 用计算机弹了,如何用计算器弹奏流行歌曲(图文教学),你需要学习了
  18. Linux UDP下C语言实现TFTP协议客户端
  19. XPosed暴力列举Package下所有的方法调用 + 列举类所欲详细信息
  20. [小黄书小程序]微信授权登录

热门文章

  1. lvs基本概念、调度方法、ipvsadm命令及nat模型示例
  2. phash图像识别应用
  3. C++ - 类模板(class template) 详解 及 代码
  4. liunx下NetworkManager导致网卡不能启动
  5. pg 事务 存储过程_PgpoolII实现数据分区存储及性能分析
  6. jQuery Validate 初见面
  7. devops 文化_为什么回馈对DevOps文化很重要
  8. ipsec加密技术谁提出的_如何提出技术问题以获得高质量的答案
  9. 开源创新的理念_开源如何解决创新问题
  10. three.js 渲染器更改背景色的几种方法