前言
使用vcpkg可以更方便地安装各种库,省去配置的时间和配置失败的风险,类似python中的anaconda,懒人必备
参考
安装参考:https://bqcode.blog.csdn.net/article/details/135831901?fromshare=blogdetail&sharetype=blogdetail&sharerId=135831901&sharerefer=PC&sharesource=weixin_45702459&sharefrom=from_link
命令参考:https://blog.csdn.net/lizhichao410/article/details/132339064?fromshare=blogdetail&sharetype=blogdetail&sharerId=132339064&sharerefer=PC&sharesource=weixin_45702459&sharefrom=from_link
第二个链接中提供了很多vcpkg的命令使用,包括库的导出和更新,但是我这里用不到,所以就没写。
VS添加英文语言包
首先要在vs中添加英语语言包:
在查找中找到visual studio installer:
点击修改:
在语言包中勾选英语并安装:
cmake工具安装
其实vcpkg还是使用cmake作为编译工具的,所以得安装cmake,地址:https://cmake.org/download/
根据自己电脑是64位还是32位选择installer,我电脑是x64,所以选择cmake-3.30.1-windows-x86_64.msi
下载之后双击msi,根据指示安装完成。
下载Vcpkg
此处可以使用git clone,但是需要外网,也可以到git网页中下载压缩包并解压:
git clone https://github.com/microsoft/vcpkg.git
安装Vcpkg
右键,以管理员身份运行
安装完成后出现exe
将vcpkg添加进vs中
文件夹内右键,在终端中打开,输入:
./vcpkg integrate install
出现以下结果则为安装成功。
在任意一个项目中打开vs,在项目属性界面就可以vcpkg
vcpkg安装库并测试
以好装的eigen库和难装的matio库做演示
在终端中搜索eigen
./vcpkg search eigen
找到eigen3
安装eigen3
./vcpkg install eigen3:x64-windows
安装成功
在终端中搜索matio
./vcpkg search matio
找到matio
安装matio
./vcpkg install matio:x64-windows
安装成功
安装成功后在终端再次运行以下命令来让全局库集成生效
./vcpkg integrate install
使用以下代码对eigen和matio进行测试
#include <iostream>
#include <vector>
#include <Eigen/Dense>
#include <matio.h>
int main() {
// ==================== Eigen 库测试部分 ====================
std::cout << "=== Eigen 库测试 ===" << std::endl;
// 创建 Eigen 矩阵
Eigen::MatrixXd eigen_mat(3, 3);
eigen_mat << 1, 2, 3,
4, 5, 6,
7, 8, 9;
std::cout << "Eigen 矩阵:\n" << eigen_mat << std::endl;
// 矩阵运算
Eigen::MatrixXd eigen_mat_squared = eigen_mat * eigen_mat;
std::cout << "Eigen 矩阵平方:\n" << eigen_mat_squared << std::endl;
// 特征值分解
Eigen::SelfAdjointEigenSolver<Eigen::MatrixXd> eigensolver(eigen_mat);
if (eigensolver.info() != Eigen::Success) {
std::cerr << "特征值计算失败" << std::endl;
return 1;
}
std::cout << "特征值:\n" << eigensolver.eigenvalues() << std::endl;
// ==================== Matio 库测试部分 ====================
std::cout << "\n=== Matio 库测试 ===" << std::endl;
// 创建 matio 变量
size_t dims[2] = { 3, 3 };
double data[9] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9 };
matvar_t* matvar = Mat_VarCreate("test_matrix", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, data, 0);
if (matvar == NULL) {
std::cerr << "创建 Matio 变量失败" << std::endl;
return 1;
}
// 打印 matio 变量信息
std::cout << "Matio 变量名称: " << matvar->name << std::endl;
std::cout << "Matio 变量大小: " << matvar->dims[0] << "x" << matvar->dims[1] << std::endl;
// 访问数据
double* mat_data = static_cast<double*>(matvar->data);
std::cout << "Matio 矩阵数据:\n";
for (size_t i = 0; i < 3; ++i) {
for (size_t j = 0; j < 3; ++j) {
std::cout << mat_data[i + j * 3] << " ";
}
std::cout << std::endl;
}
// ==================== Eigen 和 Matio 交互测试 ====================
std::cout << "\n=== Eigen 和 Matio 交互测试 ===" << std::endl;
// 将 Eigen 矩阵转换为 Matio 变量
Eigen::MatrixXd eigen_to_convert(2, 2);
eigen_to_convert << 1.5, 2.5, 3.5, 4.5;
size_t conv_dims[2] = { static_cast<size_t>(eigen_to_convert.rows()),
static_cast<size_t>(eigen_to_convert.cols()) };
// 注意: 这里直接使用 Eigen 的数据指针,确保内存布局匹配 (列优先)
matvar_t* converted_var = Mat_VarCreate("eigen_matrix", MAT_C_DOUBLE, MAT_T_DOUBLE,
2, conv_dims, eigen_to_convert.data(), 0);
if (converted_var == NULL) {
std::cerr << "转换 Eigen 矩阵到 Matio 变量失败" << std::endl;
Mat_VarFree(matvar);
return 1;
}
std::cout << "从 Eigen 转换的 Matio 变量数据:\n";
double* conv_data = static_cast<double*>(converted_var->data);
for (size_t i = 0; i < 2; ++i) {
for (size_t j = 0; j < 2; ++j) {
std::cout << conv_data[i + j * 2] << " ";
}
std::cout << std::endl;
}
// 清理资源
Mat_VarFree(matvar);
Mat_VarFree(converted_var);
std::cout << "\n测试完成!" << std::endl;
return 0;
}
测试成功,全程不需要配置属性中的环境。