当前位置: 首页 > news >正文

VS Code配置MinGW64编译Apache Arrow C++库

VS Code用MinGW64编译C++代码安装MSYS2软件并配置Apache Arrow库和测试引用库代码的完整具体步骤。

在 VS Code 中使用 MinGW64 (MSYS2) 编译 Apache Arrow C++ 库的完整步骤


1. 安装 MSYS2
  1. 下载安装包:

    • 访问 MSYS2 官网
    • 下载 x86_64 安装包(如 msys2-x86_64-xxxx.exe
  2. 安装 MSYS2:

    • 运行安装程序,默认安装到 C:\msys64
    • 勾选 “Run MSYS2 now” 完成初始化
  3. 更新基础包(在打开的 MSYS2 终端中执行):

    pacman -Syu
    # 关闭窗口后重新打开 MSYS2,再次运行:
    pacman -Su
    

2. 安装 MinGW64 工具链

在 MSYS2 终端中执行:

pacman -S --needed mingw-w64-x86_64-toolchain \mingw-w64-x86_64-cmake \mingw-w64-x86_64-ninja \mingw-w64-x86_64-gcc

3. 安装 Apache Arrow 依赖库
pacman -S mingw-w64-x86_64-boost \mingw-w64-x86_64-brotli \mingw-w64-x86_64-bzip2 \mingw-w64-x86_64-gflags \mingw-w64-x86_64-grpc \mingw-w64-x86_64-lz4 \mingw-w64-x86_64-openssl \mingw-w64-x86_64-protobuf \mingw-w64-x86_64-snappy \mingw-w64-x86_64-zlib \mingw-w64-x86_64-zstd

4. 下载并编译 Apache Arrow
  1. 克隆源码(在 MSYS2 终端中):

    cd ~
    git clone https://github.com/apache/arrow.git
    cd arrow
    git checkout apache-arrow-13.0.0  # 选稳定版本
    
  2. 创建构建目录:

    mkdir build
    cd build
    
  3. 配置 CMake:

    cmake -G "Ninja" \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_INSTALL_PREFIX=/mingw64 \-DARROW_DEPENDENCY_SOURCE=SYSTEM \-DARROW_BUILD_STATIC=ON \-DARROW_BUILD_SHARED=ON \-DARROW_COMPUTE=ON \-DARROW_CSV=ON \-DARROW_FILESYSTEM=ON \..
    
  4. 编译并安装:

    ninja
    ninja install
    

5. 配置 VS Code
  1. 添加环境变量(系统 PATH):

    • C:\msys64\mingw64\bin
    • C:\msys64\usr\bin
  2. 安装 VS Code 扩展

    • C/C++ (Microsoft)
    • CMake Tools (可选)
  3. 配置 .vscode/c_cpp_properties.json

    {"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**","C:/msys64/mingw64/include/**"],"defines": [],"compilerPath": "C:/msys64/mingw64/bin/g++.exe","cStandard": "c17","cppStandard": "c++17","intelliSenseMode": "windows-gcc-x64"}],"version": 4
    }
    

6. 测试代码示例
  1. 创建 test_arrow.cpp

    #include <arrow/api.h>
    #include <iostream>int main() {arrow::Int64Builder builder;arrow::Status status = builder.Append(1);status = builder.Append(2);status = builder.Append(3);std::shared_ptr<arrow::Array> array;status = builder.Finish(&array);std::cout << "Array length: " << array->length() << std::endl;return 0;
    }
    
  2. 编译命令(在 VS Code 终端):

    g++ test_arrow.cpp -o test_arrow -I/mingw64/include -L/mingw64/lib -larrow
    
  3. 运行前准备(确保 DLL 可用):

    # 复制必要的 DLL 到当前目录(或添加 /mingw64/bin 到 PATH)
    cp /mingw64/bin/libarrow-*.dll .
    
  4. 执行程序:

    ./test_arrow
    # 输出: Array length: 3
    

7. 调试配置 (.vscode/launch.json)
{"version": "0.2.0","configurations": [{"name": "C++ Debug","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [{"name": "PATH", "value": "C:/msys64/mingw64/bin;${env:PATH}"}],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "C:/msys64/mingw64/bin/gdb.exe","setupCommands": [{"description": "Enable pretty-printing","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "build"}]
}

8. 常见问题解决
  1. 找不到头文件/库

    • 检查 c_cpp_properties.json 中的 includePathcompilerPath
    • 确认 CMake 安装路径正确(C:/msys64/mingw64
  2. 运行时缺少 DLL

    • C:\msys64\mingw64\bin 加入系统 PATH
    • 或手动复制 libarrow-*.dll 到可执行文件目录
  3. 编译错误

    • 确保所有依赖库已通过 pacman 安装
    • 使用 -v 参数查看详细编译日志:
      g++ test_arrow.cpp -v -I/mingw64/include ...
      
  4. 更新库版本

    # 在 MSYS2 终端中
    pacman -Syu
    pacman -S mingw-w64-x86_64-arrow  # 检查是否有预编译包
    

提示:完整 Apache Arrow 文档参考 官方指南

http://www.lryc.cn/news/623467.html

相关文章:

  • 【k8s、docker】Headless Service(无头服务)
  • python+flask后端开发~项目实战 | 博客问答项目--模块化文件架构的基础搭建
  • C++算法题目分享:二叉搜索树相关的习题
  • 【前端基础】flex布局中使用`justify-content`后,最后一行的布局问题
  • ubuntu 24.04 安装
  • Android RxJava线程调度与性能优化指南
  • (一)前端面试(cookie/)
  • PostgreSQL导入mimic4
  • 数据结构代码分享-1 顺序表
  • 简单的 VSCode 设置
  • Oracle algorithm的含义
  • 基于Vue + Node能源采购系统的设计与实现/基于express的能源管理系统#node.js
  • Qt 5.5 的安装与配置(使用 VSCode编辑)
  • 【架构师从入门到进阶】第五章:DNSCDN网关优化思路——第十二节:网关安全-信息过滤
  • 基于多Agent的AFSIM复杂场景脚本生成技术(使用Claude Code)
  • 根号算法Ⅰ
  • 天地图应用篇: 增加缩放、比例尺控件
  • 24. 什么是不可变对象,好处是什么
  • 【Docker】搭建一款功能强大且免费的开源在线绘图工具 - draw.io
  • 云原生俱乐部-RH134知识点总结(2)
  • 62.不同路径
  • 【计算机网络面试】键入网址到网页显示期间,发生了什么?
  • 网络常识-DNS如何解析
  • 数据结构初阶(19)外排序·文件归并排序的实现
  • Ugit使用记录
  • 【自动化运维神器Ansible】template流程控制:for循环与if条件判断详解
  • Flink作业执行的第一步:DataFlow graph的构建
  • C11期作业18(07.12)
  • 栈与队列:数据结构中的双生子
  • 【JavaEE】多线程 -- 单例模式