一文详解MacOS+CLion——构建libtorch机器学习开发环境

对于希望在本地环境中进行深度学习开发的开发者来说,配置合适的工具链是至关重要的一步。本文旨在帮助您在 macOS 操作系统上,利用 CLion IDE 和 PyTorch 的 C++依赖库——libtorch,快速搭建起一个高效的开发环境。这里我们将一步步地讲解如何下载必要的库、设置集成开发环境(IDE),以及编写和运行简单的代码示例来验证配置是否成功。
一、下载libtorch
首先,请访问 PyTorch官方网站,根据您的 Mac 系统参数选择并下载适合的PyTorch 依赖包。在页面最下方,您可以找到下载链接。对于本文,我选择了适用于 macOS 的默认版本 libtorch。
PyTorch官方下载地址:
https://pytorch.org/get-started/locally/

下载完成后,请解压libtorch依赖库到一个易于管理的位置:这里我解压到了Android SDK的同级存储目录,朋友们可以根据自己喜好选择一个存储目录。

最后,获取当前libtorch的路径,请注意保存改路径,这里我的存储路径为:/Users/xiaxueliang/Library/Android/libtorch
二、配置CLion项目
在成功下载并解压了 libtorch 库之后,下一步就是将它集成到我们的开发环境中。CLion 是由 JetBrains 开发的一款强大的 C++ 集成开发环境(IDE),它提供了智能代码补全、静态代码分析和便捷的调试工具等功能,非常适合用于构建复杂的 C++ 项目。本节介绍如何创建一个新的 CLion 项目,并正确配置它以使用 libtorch 库。我们将逐步讲解如何设置项目的构建系统,确保所有必要的库都能被正确链接,从而让您的项目可以顺利编译和运行。
2.1 创建CLion项目
启动 CLion 并创建一个新的 C++ 项目。您可以自由命名项目,这里我定义的名称为CLion_libtorch_demo。

2.2 修改 CMakeLists.txt 文件
打开项目的 CMakeLists.txt 文件,可以以下配置信息:

2.3 链接libtorch
向CMakelists.txt文件,添加以下配置以正确链接 libtorch 库:
# 设置CMAKE_PREFIX_PATH环境变量:指向了libtorch安装目录,用于帮助CMake找到Torch库。
set(CMAKE_PREFIX_PATH /Users/xiaxueliang/Library/Android/libtorch)
# 查找Torch软件包,并且是REQUIRED:CMake会使用CMAKE_PREFIX_PATH查找TorchConfig.cmake或torch-config.cmake。
find_package(Torch REQUIRED)
# 向编译器添加头文件搜索路径:这里指定了libtorch根目录,使编译器能够在编译过程中找到libtorch的头文件。
include_directories("/Users/xiaxueliang/Library/Android/libtorch")
# 继续向编译器添加更多的头文件搜索路径:指向libtorch内部API部分。
include_directories("/Users/xiaxueliang/Library/Android/libtorch/include/torch/csrc/api/include")
# 指定链接哪些库:
target_link_libraries(CLion_libtorch_demo "${TORCH_LIBRARIES}")
需要注意的是:
/Users/xiaxueliang/Library/Android/libtorch是我们刚才解压的libtorch的路径。CLion_libtorch_demo是我们的项目名称。
CLion会自动重新加载链接相关配置:

2.4 编写 C++ 源代码
接下来,在 main.cpp 文件中输入如下代码段,用以测试 libtorch 的基本功能:
#include <torch/torch.h>
#include <iostream>
#include <torch/csrc/autograd/variable.h> int main(int args, const char **arg) { // 创建一个形状为{2, 10}的二维张量b,其元素是从标准正态分布(均值为0,方差为1)随机抽取的浮点数。 torch::Tensor b = torch::randn({2, 10}); // 创建一个形状为{2, 10}的二维张量a,其元素是介于20(包含)和40(不包含)之间的随机整数。 torch::Tensor a = torch::randint(20, 40, {2, 10}); // 将张量b与张量a相加,并将结果输出到控制台。 std::cout << b + a << std::endl; return 0;
}
添加上述代码后,可通过 File—>Reload CMake Project 重新Reload项目,以消除依赖报红的问题:

2.5 运行
完成上述步骤后,点击运行按钮即可编译并执行程序。如果一切顺利,您应该能在控制台上看到两个随机生成张量相加的结果。

通过以上步骤,您现在已经在 macOS 上成功地配置了一个基于 CLion 和 libtorch 的开发环境。希望这篇文章能够帮助您顺利开始深度学习之旅。
相关文章:
一文详解MacOS+CLion——构建libtorch机器学习开发环境
对于希望在本地环境中进行深度学习开发的开发者来说,配置合适的工具链是至关重要的一步。本文旨在帮助您在 macOS 操作系统上,利用 CLion IDE 和 PyTorch 的 C依赖库——libtorch,快速搭建起一个高效的开发环境。这里我们将一步步地讲解如何下…...
【LeetCode 面试经典150题】详细题解之哈希表篇
【LeetCode 面试经典150题】详细题解之哈希表篇 1 哈希表的基础1.1 基础概念及实现1.2.1 哈希表的工作原理1.2.2 705.设计哈希集合1.2.3 706.设计哈希映射 1.2 HashMap相关1.2.1 基本操作1.2.2 遍历 1.3 Hashtable1.4 LinkedHashMap1.5 HashSet**1.5.1基本特性**1.5.2 基本方法…...
linux socket编程之udp_dict_serve服务端--引入配置文件
注意:本篇博客只是对上一篇博客功能的增加 1.创建配置文件(翻译) Dict.txt apple: 苹果 banana: 香蕉 cat: 猫 dog: 狗 book: 书 pen: 笔 happy: 快乐的 sad: 悲伤的 run: 跑 jump: 跳 teacher: 老师 student: 学生 car: 汽车 bus: 公交车 love: 爱 hate: 恨 hell…...
selenium学习笔记(二)
文章目录 前言设计模式POMPOM概念POM优势POM设计原则POM的实现 selenium的常用操作处理动态元素截图操作勾选复选框多层框架/窗口定位操作下拉框上传文件操作处理弹窗切换窗口拖拽操作 如何处理浏览器驱动更新导致的问题selenium与网站监控监听网页内容变化监控网络请求 seleni…...
宏集eX710物联网工控屏在石油开采机械中的应用与优势
案例概况 客户:天津某石油机械公司 应用产品:宏集eX710物联网工控屏 应用场景:钻井平台设备控制系统 一、应用背景 石油开采和生产过程复杂,涵盖钻井平台、采油设备、压缩机、分离器、管道输送系统等多种机械设备。这些设备通…...
linux——vi命令常用操作
一、vi模式 vi一般分为三种模式,分别是命令行模式、插入模式、末行模式 1.命令模式:控制屏幕光标的移动,按 :进入末行模式,按 i(其他插入命令也可) 进入插入模式; 2.插入模式&…...
vscode添加全局宏定义
利用vscode编辑代码时,设置了禁用非活动区域着色后,在一些编译脚本中配置的宏又识别不了 遇到#ifdef包住的代码就会变暗色,想查看代码不是很方便。如下图: 一 解决: 在vscode中添加全局宏定义。 二 步骤:…...
重装荣耀X14笔记本电脑踩坑记
这几天趁着有国补搞了台荣耀 X14笔记本电脑。到手后第一件事情对我来说当然是要重装成Windows 11 LTSC版。所以按以往的经验做了个USB启动安装盘,但发现上电后按F12能进入启动设备选择,可是USB分类下没有任何设备。重启按F2进入设置界面,关闭…...
Android `android.graphics.drawable` 包深度解析:架构与设计模式
Android android.graphics.drawable 包深度解析:架构与设计模式 目录 引言Drawable 概述Drawable 的架构 Drawable 类层次结构Drawable 的核心方法Drawable 的设计模式 装饰者模式工厂模式状态模式常用 Drawable 子类解析 BitmapDrawableShapeDrawableLayerDrawableStateList…...
Kotlin语言的软件工程
Kotlin语言的软件工程 引言 在现代软件开发中,选择合适的编程语言是项目成功的关键之一。随着移动互联网的迅猛发展,以及大数据和人工智能等新兴技术的崛起,Kotlin语言凭借其简洁、高效和安全等特性,迅速崛起为备受欢迎的编程语…...
面试经典 150 题——数组/字符串(一)
文章目录 1、合并两个有序数组1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、移除元素2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、删除有序数组中的重复项3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、删除有序数组中的重复项 II4.1 题目链接4.2 题…...
使用亚马逊针对 PyTorch 和 MinIO 的 S3 连接器实现可迭代式数据集
2023 年 11 月,Amazon 宣布推出适用于 PyTorch 的 S3 连接器。适用于 PyTorch 的 Amazon S3 连接器提供了专为 S3 对象存储构建的 PyTorch 数据集基元(数据集和数据加载器)的实现。它支持用于随机数据访问模式的地图样式数据集和用于流式处理…...
TestMAX/DFT Compiler:时序单元的类型、连接顺序和后DFT优化
相关阅读 TestMAX/DFT Compilerhttps://blog.csdn.net/weixin_45791458/category_12865937.html?spm1001.2014.3001.5482 时序单元的状态 未映射的时序单元(Unmapped Sequential Cell) 在Design Compiler读取了一个RTL设计后,Design Compiler内置的HDL Compiler工…...
CAN201 Introduction to Networking(计算机网络)Pt.3 网络层
文章目录 4.Network Layter(网络层)4.1 Overview4.2 Router(路由器)4.3 Internet Protocol4.4 IPv4 addressing4.5 NAT(network address translation,网路地址转换)4.6 IPv64.7 Generalized For…...
App Factory:简化和加速私人应用开发
App Factory是Codigger提供的一套先进的开发工具、库和API,旨在帮助开发人员在现有的软件基础上添加特定的功能或扩展。它为私人应用的创建、开发和发布提供了一整套先进的工具集、集成的相关资源库以及强大的API接口,使开发者能够在现有的Codigger架构之…...
PHP语言laravel框架中基于Redis的异步队列使用实践与原理
在 Laravel 中,基于 Redis 的异步队列是通过 Laravel 的队列系统与 Redis 服务结合来实现的。这种队列机制允许你将任务推送到队列中,并由后台工作进程异步处理这些任务。这样,你就可以将耗时的操作(如发送邮件、处理视频、数据同…...
全面Kafka监控方案:从配置到指标
文章目录 1.1.监控配置1.2.监控工具1.3.性能指标系统相关指标GC相关指标JVM相关指标Topic相关指标Broker相关指标 1.4.性能指标说明1.5.重要指标说明 1.1.监控配置 开启JMX服务端口:kafka基本分为broker、producer、consumer三个子项,每一项的启动都需要…...
kipotix4靶机实战
信息收集 1.判断靶机ip 原理:开靶机之前nmap扫一次网段,再开靶机之后扫一次,查看多出来的ip就是靶机ip ip192.168.98.1742.判断端口服务,系统版本 a.确定端口 b.-p指定端口进一步收集 c.信息筛选 1.端口:22,80,139,…...
我的秋招总结
我的秋招总结 个人背景 双非本,985硕,科班 准备情况 以求职为目的学习Java的时间大概一年。 八股,一开始主要是看B站黑马的八股文课程,背JavaGuide和小林coding还有面试鸭。 算法,250,刷了3遍左右 项目&…...
广义线性模型(GLM)全面解析
引言 广义线性模型(Generalized Linear Model, GLM)是统计学中一种重要的建模工具,它扩展了传统线性回归模型,能够处理响应变量的非正态分布和非线性关系。GLM 的灵活性和广泛的应用范围使其在金融、医学、社会科学等领域中成为数…...
51单片机实战:从零构建电子密码锁系统
1. 项目背景与硬件准备 第一次接触51单片机时,我就被它的实用性深深吸引。作为电子爱好者入门的最佳选择,STC89C52这款经典芯片就像乐高积木的基础模块——价格亲民(某宝20元就能买到开发板)、资源丰富(8K Flash、512…...
500套帐篷发往西非:我们凭什么拿下这单?
一句吐槽,让我们抓住了机会年初,天津京路发科技收到一封西非询盘:500套支架帐篷,用于安置点。客户顺带吐槽了一句:“之前的帐篷,没撑过上一个雨季。”我们懂了——价格不是关键,耐造才是。先看气…...
PyTorch 2.8镜像效果实测:Wan2.2-I2V图生视频在4090D上的流畅度表现
PyTorch 2.8镜像效果实测:Wan2.2-I2V图生视频在4090D上的流畅度表现 1. 测试环境与配置 1.1 硬件配置 本次测试使用的是基于RTX 4090D显卡的深度学习工作站,具体配置如下: 显卡:NVIDIA RTX 4090D 24GB显存CPU:10核…...
WPF进阶:Canvas动态图形绘制与交互实现
1. Canvas动态图形绘制基础 WPF中的Canvas就像一块无限延伸的画布,我们可以在这块画布上自由地绘制各种图形元素。与静态绘制不同,动态绘制的魅力在于图形能够根据用户操作实时变化。我刚开始接触Canvas时,最让我兴奋的就是看到鼠标移动时能实…...
告别照相馆!AI头像生成器教你免费制作高质量职业头像
告别照相馆!AI头像生成器教你免费制作高质量职业头像 1. 为什么选择AI生成职业头像? 在当今数字化求职环境中,一张专业的头像照片已经成为简历不可或缺的部分。传统照相馆拍摄存在三个主要痛点: 成本高昂:专业摄影工…...
矩阵理论进阶:内积空间与正交变换的深度解析
1. 内积空间:从几何直觉到严格定义 第一次接触内积空间时,很多人会被各种抽象定义搞得晕头转向。其实我们可以从最熟悉的二维平面开始理解——当你计算两个向量的点积时,本质上是在测量它们的"相似程度"。这种几何直觉正是内积空间…...
ESP32 TCP服务端避坑指南:从端口复用到KeepAlive,这些配置项你真的懂了吗?
ESP32 TCP服务端深度配置实战:从端口复用到KeepAlive参数调优 在物联网设备开发中,TCP服务端的稳定性往往决定着整个系统的可靠性。许多开发者在使用ESP32搭建TCP服务端时,虽然能够快速实现基础通信功能,但当面临多设备连接、网络…...
大多数团队不是“用不好 PPO”,而是“用错了 PPO”
更多时候,你会听到的是: “PPO 太复杂了,算了”“调了一轮,模型变怪了”“感觉不如再多搞点 SFT 数据” 于是 PPO 很容易被贴上一个标签: “理论上很强,工程上很坑。” 但这个结论,其实并不公…...
当企业规模增长后,IT管理为什么越来越“失控”?
在企业早期,IT 管理往往是“够用就好”。 一套简单的工单工具、一份资产台账、几个人工流程,就足以支撑日常运转。但当企业规模逐渐扩大,员工数量增长、系统复杂度提升、业务节奏加快时,原本“还能用”的 IT 管理方式,…...
FASTDDS-Python 实战:从零构建分布式通信环境
1. 为什么选择Fast DDS-Python? 在物联网和机器人系统中,设备间的实时通信是个硬需求。想象一下,你正在开发一个智能仓储机器人系统,需要让多台机器人在复杂环境中协同工作。这时候,传统的HTTP请求-响应模式就显得力不…...
