首页 > 其他分享 >利用msys2使用libtorrent库的个人记录

利用msys2使用libtorrent库的个人记录

时间:2024-11-25 14:00:58浏览次数:6  
标签:msys2 记录 ip mt lboost libtorrent boost

在msys2的包存储库中存在libtorrent-rasterbar的预编译包

可以参考

https://packages.msys2.org/packages/mingw-w64-ucrt-x86_64-libtorrent-rasterbar

使用msys2中的C++构建工具应该可以直接使用这个预编译库

我简单试了一下确实可以, 不过我没有使用cmake

不使用cmake工具最大的问题就是需要手动列举出所有的依赖库, 好像不支持通配符语法比如"-lboost_*"这样, 所以我手动将我电脑上所有的"boost"库的文件全部列举了出来, 包括其他依赖的库, 

"-ltorrent-rasterbar"这个参数指的就是libtorrent库本身的链接文件, 这种写法可以忽略文件名开头的"lib"和末尾的".a"

非常重要的一点是需要编译器能自动在默认路径找到头文件跟静态库, 因为我是使用msys2的包管理器安装的libtorrent库,所以包括依赖的boost库都自动安装到了默认能找到的路径中,否则需要手动指定头文件跟静态库的路径

下面是我没有使用cmake工具而是直接使用g++加参数编译的vscode任务配置参考

其中最重要的是"-l"开头导入的库, 大多都是"boost"库, 添加了"-static"参数静态链接所有依赖项, 输入的是单文件使用了vscode的内置参数"${file}",会将运行任务时正在编辑的文件作为输入, 在当前工作目录的"out"子目录中输出"${workspaceFolder}/out/${fileBasenameNoExtension}.exe" 其他的参数是一些比如是否启用严格类型转换检查的选项等

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "C/C++: g++ build active file",
      "command": "C:/Users/PC/AppData/Local/Programs/msys2/ucrt64/bin/g++",
      "args": [
        "-m64",
        //"-O2",
        "-pedantic-errors",
        "-Woverflow",
        "-Wconversion",
        "-Werror",
        "-Wextra",
        "-std=c++20",
        "-fconcepts",
        "-static",
        "${file}",
        "-ltorrent-rasterbar",
        "-lboost_atomic-mt",
        "-lboost_charconv-mt",
        "-lboost_chrono-mt",
        "-lboost_container-mt",
        "-lboost_context-mt",
        "-lboost_contract-mt",
        "-lboost_coroutine-mt",
        "-lboost_date_time-mt",
        "-lboost_exception-mt",
        "-lboost_fiber-mt",
        "-lboost_filesystem-mt",
        "-lboost_graph-mt",
        "-lboost_iostreams-mt",
        "-lboost_json-mt",
        "-lboost_locale-mt",
        "-lboost_log-mt",
        "-lboost_log_setup-mt",
        "-lboost_math_c99-mt",
        "-lboost_math_c99f-mt",
        "-lboost_math_c99l-mt",
        "-lboost_math_tr1-mt",
        "-lboost_math_tr1f-mt",
        "-lboost_math_tr1l-mt",
        "-lboost_nowide-mt",
        "-lboost_numpy311-mt",
        "-lboost_prg_exec_monitor-mt",
        "-lboost_program_options-mt",
        "-lboost_python311-mt",
        "-lboost_random-mt",
        "-lboost_regex-mt",
        "-lboost_serialization-mt",
        "-lboost_stacktrace_noop-mt",
        "-lboost_stacktrace_windbg-mt",
        "-lboost_stacktrace_windbg_cached-mt",
        "-lboost_system-mt",
        "-lboost_test_exec_monitor-mt",
        "-lboost_thread-mt",
        "-lboost_timer-mt",
        "-lboost_type_erasure-mt",
        "-lboost_unit_test_framework-mt",
        "-lboost_url-mt",
        "-lboost_wave-mt",
        "-lboost_wserialization-mt",
        "-lssl",
        "-lcrypto",
        "-lcrypt32",
        "-lws2_32",
        "-lwininet",
        "-lshlwapi",
        "-lIphlpapi",
        "-lMswsock",
        "-o",
        "${workspaceFolder}/out/${fileBasenameNoExtension}.exe"
      ],
      "options": {
        "cwd": "C:/Users/PC/AppData/Local/Programs/msys2/ucrt64/bin/"
      },
      "problemMatcher": [
        "$gcc"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "Task generated by Debugger."
    },
  ]
}

 

 

一个简单的示例是这样

这个示例下载一个链接, 下载之前添加了一个已知的对等点"192.168.0.110:6881" 是我本地局域网中的另一个设备, 端口号是这个设备上的bt应用设置的侦听端口号

把这个设备中已经下载完毕的文件下载到当前设备上, 保存的位置是当前工作文件夹, 但是可能也会从其他对等点下载

但是没有进度提示

#include <libtorrent/session.hpp>
#include <libtorrent/add_torrent_params.hpp>
#include <libtorrent/torrent_handle.hpp>
#include <libtorrent/magnet_uri.hpp>
#include <iostream>
int main(int argc, char const* argv[])
{
        
        lt::session ses{};
        auto str = u8"";//magnet 链接字符串

        std::string strstr{reinterpret_cast<const char*>(str)};

        lt::add_torrent_params atp = lt::parse_magnet_uri(strstr);
        boost::asio::ip::address_v4 ip_v4 = boost::asio::ip::address_v4::from_string(reinterpret_cast<const char*>(u8"192.168.0.110"));
        boost::asio::ip::address ip{ip_v4};



        atp.peers.push_back(libtorrent::tcp::endpoint{ip, 6881});

        atp.save_path = "."; // save in current dir
        lt::torrent_handle h = ses.add_torrent(atp);
       
        // ...

        std::cout << "ok" << std::endl;

        int n;

        std::cin >> n;
        
}

 

标签:msys2,记录,ip,mt,lboost,libtorrent,boost
From: https://www.cnblogs.com/GhRZKmny/p/18567300

相关文章

  • 【牛客训练记录】牛客周赛 Round 69
    训练情况赛后反思好吧,D题没想到二进制枚举,以为\(O(2^knm)\)不可做。。。A题要求要等差数列,我们先求公差,为两元素的最大值-最小值,再在最大值的基础上加上公差即可。#include<bits/stdc++.h>//#defineintlonglong#defineendl'\n'usingnamespacestd;voidsol......
  • iOS 审核被拒记录 2.5.1
    解决方案一(当前项目不需要HealthKit框架,将HealthKit相关内容和权限移除)解决方案二(当前项目需要HealthKit框架) Guideline2.5.1-Performance-SoftwareRequirementsYourapp'sbinaryincludesreferencestoHealthKitcomponents,buttheappdoesnotappeartoinc......
  • [hit-oslab] 实验7-地址映射-实验记录
    取巧正解step1.找到段表(LDT)地址step2.查到ds真实值step3.虚拟地址转物理地址step4.找页框号refBochs常用调试命令b[addr] //加断点于[addr]c //继续运行ctrl+c //暂停运行n //单步运行回车 //继续上次的命令r //查看......
  • 记录一下 TensorFlow 的基本概念和使用场景
    TensorFlow是一个开源的机器学习框架,由Google开发和维护。它提供了一种灵活的方式来构建和训练各种机器学习模型。TensorFlow的基本概念包括:张量(Tensor):TensorFlow中的基本数据单元,可以看作是一个多维数组。张量可以是常量(Constant)或变量(Variable)。数据流图(DataFlowGr......
  • 【CodeForces训练记录】CodeTON Round 9 (Div. 1 + Div. 2, Rated, Prizes!)
    训练情况赛后反思发现自己越来越能猜结论了,连续两题结论猜对了,一把rating上青了。A题构造一个数组使得模数互不相同,考虑构造一个模数为\([0,1,2,3,4,5]\)的数列,所以一个全是奇数的数列\([1,3,5,7,9]\)符合条件,直接输出\(1\simn\)的奇数即可。#include<bits/stdc++.......
  • 基于Java+SSM+HTML5个人健康信息管理系统(源码+LW+调试文档+讲解等)/个人健康记录/健
    博主介绍......
  • 联想乐檬k30-t Root 救砖教程|一次折腾记录|爆改水果
    本篇文章目录目录废话救砖Root权限获取修改开机动画和主页面文件下载链接废话一起都要从我在某鱼上买了一个已经刷了miui的这个手机说起,看到卖家给的图片上是有超级授权这个软件的,说明有root权限,于是我就拿下了,但是我就只删了两个软件,手机就开始疯狂闪屏,再然后就砖了......
  • ABP aspnetzero power toole 最新 4.4.0 和谐记录
    参照之前的记录.netzeropowertoole破解日志在用工具创建模型后,点击生成的过程.会在代码目录生成AspNetZeroRadTool的文件夹.总是会覆盖.AspNetZeroRadTool的文件夹中生成当前模型的json文件执行dotnetAspNetZeroRadTool模型.json生成文件所以要处理的......
  • 博客园管理记录
       2024年11月2011.06入园时间~【这个时间我在上大一欸~】大道至简,知易行难。从今天开始改变,这是对平庸生活最好的回击。   点击右上角即可分享......
  • 近期学习记录
    一.单点登录SingleSignOn(SSO),只需要登录一次,就可以访问所有信任的应用系统。二.权限验证是如何实现的三.上传数据的安全性如何控制加密和解密是同一个密钥,就是对称加密。三.遇到了哪些比较棘手的问题就是前端获取不到数据,所以排查问题,经过一系列的排......