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

libxls库的编译以及基于Visual studio的配置

最近有一个需求在windows处理xls,所以就需要libxls这个库,调查了一下,基于C++的库的解析情况如下:
在这里插入图片描述
所以最理想的就是Libxlsd个开源的方案

基于历史整理的 libxls 在 MinGW 下的编译步骤

前提条件
  • 系统:Windows(你的情况)。
  • 工具:已安装 MSYS2(C:\msys64)。
  • 源码:libxls 1.6.3,已下载并解压到 /Downloads/libxls-1.6.3/libxls-1.6.3
  • 目标:生成 libxlsreader-8.dll,包括 Debug 版本。

编译步骤

1. 准备 MSYS2 环境
  1. 更新 MSYS2

    • 打开任意 MSYS2 终端(如 MSYS 终端):
      C:\msys64\msys2_shell.cmd -msys
      
    • 更新系统:
      pacman -Syu
      
      • 若提示关闭终端,关闭后重新打开并再次运行 pacman -Syu
  2. 安装基本工具

    • 在 MSYS 终端安装 autotools:
      pacman -S autoconf automake libtool autoconf-archive make
      
    • 在 MinGW64 终端安装编译器:
      C:\msys64\msys2_shell.cmd -mingw64
      pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-make
      
2. 配置源码
  1. 进入源码目录

    • 在 MinGW64 终端:
      cd /Downloads/libxls-1.6.3/libxls-1.6.3
      
  2. 生成 configure 文件

    • 切换到 MSYS 终端(autotools 需要 POSIX 环境):
      C:\msys64\msys2_shell.cmd -msys
      cd /Downloads/libxls-1.6.3/libxls-1.6.3
      
    • 运行:
      autoreconf -i
      
    • 注意:若报错(如 AX_CXX_COMPILE_STDCXX_11),确保 autoconf-archive 已安装。
3. 配置编译选项
  1. 打开 MinGW64 终端

    C:\msys64\msys2_shell.cmd -mingw64
    cd /Downloads/libxls-1.6.3/libxls-1.6.3
    
  2. 配置 Release 版本(默认):

    ./configure --prefix=/mingw64 MAKE=mingw32-make
    
  3. 配置 Debug 版本

    • 添加调试符号并禁用优化:
      ./configure --prefix=/mingw64 MAKE=mingw32-make CFLAGS="-g -O0" CXXFLAGS="-g -O0" LDFLAGS="-g"
      
    • 可选:若需静态库:
      ./configure --prefix=/mingw64 --disable-shared --enable-static MAKE=mingw32-make CFLAGS="-g -O0" CXXFLAGS="-g -O0"
      
4. 编译
  1. 清理旧构建(可选):

    mingw32-make clean
    
  2. 编译

    mingw32-make
    
    • 注意:若遇到 spawnv 类型冲突错误,见下文“常见问题”。
5. 安装
  1. 安装库和头文件

    mingw32-make install
    
  2. 验证输出

    • 检查生成的库:
      ls /mingw64/bin/libxlsreader-8.dll  # 动态库
      ls /mingw64/lib/libxlsreader.dll.a  # 导入库
      ls /mingw64/lib/libxlsreader.la     # Libtool 元数据
      
    • 检查头文件:
      ls /mingw64/include/libxls
      
    • Debug 版本验证:
      objdump -h /mingw64/bin/libxlsreader-8.dll | grep debug
      

常见问题及解决

1. make: command not found
  • 现象:运行 make 时出错。
  • 解决
    pacman -S mingw-w64-x86_64-make
    alias make='mingw32-make'  # 临时别名
    
    • 或直接用:
      ./configure --prefix=/mingw64 MAKE=mingw32-make
      mingw32-make
      

也可以使用以下这个指令亲测:

CC='gcc' ./configure --build=mingw64 --prefix=/mingw64 --enable-static --enable-shared MAKE=mingw32-make && make install
2. AX_CXX_COMPILE_STDCXX_11 语法错误
  • 现象
    ./configure: line 19757: syntax error near unexpected token `,'
    
  • 解决
    • 安装 autoconf-archive
      pacman -S autoconf-archive  # 在 MSYS 或 MinGW64 终端
      
    • 重新运行:
      autoreconf -i  # 在 MSYS 终端
      
3. spawnv 类型冲突
  • 现象
    C:/msys64/mingw64/include/process.h:196:28: error: conflicting types for 'spawnv'
    
  • 解决
    • 修改代码
      • 编辑 src/xls2csv.ctest/test.ctest/test2.ccplusplus/main.cpp
        - rval = (int) _spawnv(_P_WAIT, lt_argv_zero, (const char * const *) newargz);
        + rval = (int) _spawnv(_P_WAIT, lt_argv_zero, (char *const *) newargz);
        
      • 或移除 unistd.h,替换为:
        #include <process.h>
        
    • 禁用测试程序和 xls2csv(推荐,若只需库):
      • 编辑 Makefile.am
        #bin_PROGRAMS = xls2csv
        #noinst_PROGRAMS = test_libxls test2_libxls
        #if HAVE_CXX11
        #noinst_PROGRAMS += test_cpp
        #endif
        
      • 重新生成:
        autoreconf -i  # 在 MSYS 终端
        ./configure --prefix=/mingw64 MAKE=mingw32-make
        mingw32-make
        
4. Makefile.am 警告
  • 现象
    Makefile.am:35: warning: variable 'xls2csv_SOURCES' is defined but no program or library has 'xls2csv' as canonical name
    
  • 解决
    • 若禁用程序,忽略警告。
    • 若需编译程序,确保 bin_PROGRAMSnoinst_PROGRAMS 未注释。

生成的库

  • Release 版本
    • /mingw64/bin/libxlsreader-8.dll
    • /mingw64/lib/libxlsreader.dll.a
    • /mingw64/lib/libxlsreader.la
  • Debug 版本
    • 同上,但文件包含调试符号(用 -g -O0 配置)。

使用示例

  • C 调用(MinGW):

    gcc -I/mingw64/include/libxls -L/mingw64/bin -lxlsreader test.c -o test.exe
    ./test.exe
    
  • Visual Studio

    • 需用 MSVC 重新编译,或将 .dll 放入项目目录并配置头文件。

总结

以上步骤在你的环境下(MSYS2 MinGW64,路径 /Downloads/libxls-1.6.3/libxls-1.6.3)可生成 libxlsreader-8.dll。Debug 版本需添加 CFLAGS="-g -O0"。若只需库,禁用测试程序可简化流程。按步骤操作即可成功编译!

第二步骤就是将得到的dll转为.lib ,供visual studio引用

使用 dlltool 生成 .def 文件再转换
(如果 reimp 不可用(我是没找到合适安装包和路径)可通过以下步骤手动转换)

  1. 生成 .def 文件:
gendef libxlsreader-8.dll
  1. 使用 dlltool 生成 .lib:
dlltool -d libxlsreader.def -D libxlsreader.dll -l libxlsreader.lib -k

相关文章:

libxls库的编译以及基于Visual studio的配置

最近有一个需求在windows处理xls&#xff0c;所以就需要libxls这个库&#xff0c;调查了一下&#xff0c;基于C的库的解析情况如下&#xff1a; 所以最理想的就是Libxlsd个开源的方案 基于历史整理的 libxls 在 MinGW 下的编译步骤 前提条件 系统&#xff1a;Windows&#…...

OpenHarmony构建系统-GN与子系统、部件、模块理论与实践

理论 OpenHarmony源码体系 OpenHarmony的源码架构基于模块化设计&#xff0c;为了方便系统的功能的增加和裁剪&#xff0c;设计了基于GN构建的模块系统。整个模块可从大到小划分为产品(product)、领域/子系统集(domain)、子系统(sub system)、部件(component)、模块/组件(modu…...

kafka+spring cloud stream 发送接收消息

方案 1&#xff1a;使用旧版 StreamListener&#xff08;适用于 Spring Cloud Stream < 2.x&#xff09; 1. 添加依赖&#xff08;pom.xml&#xff09; <!-- Spring Cloud Stream Kafka Binder --> <dependency> <groupId>org.springframework.clo…...

使用ArcGIS Pro自动矢量化水系

在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;自动矢量化是一项至关重要的技术&#xff0c;它能够将栅格图像中的要素转换为矢量数据&#xff0c;从而方便后续的分析和处理。本文将详细介绍如何使用ArcGIS Pro自动矢量化水系&#xff0c;适用于那些颜色相对统一、…...

在PyCharm中运行Jupyter Notebook的.ipynb文件及其pycharm软件的基础使用

&#xff08;注意需使用PyCharm专业版&#xff0c;学生、教师可以申请免费使用&#xff1a;https://www.jetbrains.com/shop/eform/students&#xff09; 1. pycharm2024版汉化 https://blog.csdn.net/m0_74103046/article/details/144560999 2. pycharm中的python控制台和J…...

实验 Figma MCP + Cursor 联合工作流

开源项目 Figma-Context-MCP 介绍 使用此 Model Context Protocol 服务器授予 Cursor 对 Figma 文件的访问权限。 当 Cursor 可以访问 Figma 设计数据时&#xff0c;它比粘贴屏幕截图等其他方法更能准确地进行代码转化。 开源仓库&#xff1a; GLips/Figma-Context-MCP 具体…...

移植live555 上的 rtsp

一、V4L2视频采集模块&#xff08;完整示例&#xff09; #include <linux/videodev2.h> #include <sys/ioctl.h> #include <fcntl.h>// 初始化V4L2摄像头 int init_v4l2_camera(const char* dev_path, int width, int height) {int fd open(dev_path, O_RD…...

Web Worker终极优化指南:4秒卡顿→0延迟的实战蜕变

&#x1f4a1; 导读&#xff1a;从4秒卡顿到丝滑响应 真实痛点场景&#xff1a;当斐波那契数列计算量达10亿次时&#xff0c;页面完全冻结4.2秒&#xff01;通过Web Worker优化后&#xff0c;UI响应时间降至16ms以内。本文手把手带您实现性能蜕变&#xff01; 一、Web Worker核…...

redis中的Lua脚本,redis的事务机制

lua脚本的特点 lua脚本可以操作redis数据库&#xff0c;并且脚本中的代码满足原子性&#xff0c;要么全部被执行&#xff0c;要么全部不执行 lua脚本的语法 脚本示例 lua脚本的草稿&#xff1a; 最终的lua脚本 lua脚本在java里调用的方法 RedisTemplete类里有一个方法&…...

CPU多级缓存与缓存一致性协议

CPU多级缓存与缓存一致性协议 CPU多级缓存和缓存一致性协议是计算机体系结构中优化性能与保证数据正确性的核心机制。以下从缓存层级设计、工作原理、一致性协议&#xff08;如MESI&#xff09;及其实现细节展开说明。 一、为什么需要多级缓存&#xff1f; CPU的计算速度远高…...

Apifox 增强 AI 接口调试功能:自动合并 SSE 响应、展示DeepSeek思考过程

在现代的API接口调试中&#xff0c;效率和精确性对于开发者和测试人员来说至关重要。Apifox&#xff0c;作为一款功能强大的API管理和调试工具&#xff0c;近年来不断提升其用户体验和智能化功能。最近&#xff0c;Apifox 推出了增强版的AI接口调试功能&#xff0c;其中包括自动…...

【电机控制】42步进电机+arduino:WHEELTEC_MS42DDC

轮趣科技 42步进电机arduino:WHEELTEC_MS42DDC 接线方式&#xff1a; WHEELTEC_MS42DDC有两个接口&#xff0c; 一端接口连接配套的DC电源&#xff0c;另外一端只需要用三根线&#xff0c;一根负极连接ardino 的GND&#xff0c;然后把该端口的tx和rx连接到arduino的rx和tx,下…...

使用LangChain构建第一个ReAct Agent

使用LangChain构建第一个ReAct Agent 准备环境 使用Anaconda 安装python 3.10 安装langchain、langchain_openai、langchain_community &#xff08;安装命令 pip install XXX&#xff09; 申请DeepSeek API&#xff1a;https://platform.deepseek.com/api_keys&#xff08;也…...

萝卜头笔作文赏析

在遥远的无寻王国&#xff0c;有这么一支小小的笔诞生了&#xff0c;人们见它又短又小&#xff0c;于是就给它取名叫萝卜头笔。萝卜头笔渐渐长大了&#xff0c;除了身子变粗些&#xff0c;其他什么都没变。一天&#xff0c;萝卜头笔来到了深山老林&#xff0c;那里枝叶繁茂&…...

RT-Thread+STM32L475VET6——USB鼠标模拟

文章目录 前言一、板载资源二、具体步骤1.配置icm20608传感器2.打开CubeMX进行USB配置3. 配置USB3.1 打开USB驱动3.2 声明USB3.3 剪切stm32xxxx_hal_msp.c中的void HAL_PCD_MspInit(PCD_HandleTypeDef* hpcd)和void HAL_PCD_MspDeInit(PCD_HandleTypeDef* hpcd)函数至board.c3.…...

rust 安全性

Rust 是 静态类型&#xff08;statically typed&#xff09; 语言&#xff0c; 也就是说在编译时就必须知道所有变量的类型&#xff0c; 这一点将贯穿整个章节。 C/C的安全问题 内存的不正确访问引发的内存安全问题 由于多个变量指向同一块内存区域导致的数据一致性问题 由于…...

大模型驱动的围术期质控系统全面解析与应用探索

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 研究创新点 二、大模型技术与围术期管理概述 2.1 大模型技术原理与发展现状 2.2 围术期管理流程与挑战 三、大模型在术前的应用 3.1 病历内涵质控 3.2 智能医学问答与知识查询 3.3 疾病风险预测与评估 3.…...

中兴B863AV3.2-T/B863AV3.1-T2/B863AV3.1-T2K_电信高安_S905L3A-B_安卓9.0_线刷固件包

中兴B863AV3.2-T&#xff0f;B863AV3.1-T2&#xff0f;B863AV3.1-T2K_电信高安_S905L3A-B_安卓9.0_线刷固件包 B863AV3.2-T B863AV3.1-T2 已知可通刷贵州、江苏、贵州、北京、河南、陕西等省份。 线刷方法&#xff1a;&#xff08;新手参考借鉴一下&#xff09; 1、准备好一…...

Android Binder机制

Binder是IPC&#xff08;进程间通信&#xff09;的一种机制&#xff0c;它允许不同的应用或系统服务在不同的进程中安全地交换数据。Binder的核心原理是基于客户端-服务器模型&#xff08;C/S架构)。 一、Binder的定义 1. Binder是Android中的一个类&#xff0c;它继承了IBind…...

【算法】初等数论

初等数论 模 取余&#xff0c;遵循尽可能让商向0靠近的原则&#xff0c;结果的正负和左操作数相同 取模&#xff0c;遵循尽可能让商向负无穷靠近的原则&#xff0c;结果的正负和右操作数相同 7/&#xff08;-3&#xff09;-2.3&#xff0c;产生了两个商-2和-3&#xff0c;取…...

从PyTorch到RV1126:手把手教你用RKNN-Toolkit Lite在嵌入式设备上部署YOLOv5

从PyTorch到RV1126&#xff1a;YOLOv5模型在Rockchip平台的终极部署指南 当YOLOv5遇上Rockchip RV1126&#xff0c;会擦出怎样的火花&#xff1f;作为嵌入式AI开发者&#xff0c;你一定遇到过这样的困境&#xff1a;在PC端训练好的高性能模型&#xff0c;到了资源受限的边缘设备…...

告别野路子!用STM32F407ZGT6标准库V1.9.0搭建工程模板的保姆级避坑指南

STM32F407标准库工程搭建实战&#xff1a;从零到编译成功的全流程精解 第一次接触STM32F407标准库的开发者&#xff0c;往往会在工程搭建环节耗费大量时间。网上零散的教程要么步骤不全&#xff0c;要么存在隐藏陷阱&#xff0c;导致新手在Keil配置、文件选择、宏定义等环节反复…...

Windows Cleaner:你的Windows系统智能管家,告别C盘爆红卡顿烦恼

Windows Cleaner&#xff1a;你的Windows系统智能管家&#xff0c;告别C盘爆红卡顿烦恼 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为Windows电脑越用越慢…...

别再到处找图表库了!WinForm自带这个Chart控件,5分钟搞定实时数据曲线图

解锁WinForm隐藏技能&#xff1a;用原生Chart控件打造专业级实时数据可视化 在桌面应用开发中&#xff0c;数据可视化往往是刚需&#xff0c;但很多开发者第一反应是去寻找第三方图表库&#xff0c;却忽略了.NET框架自带的强大工具。System.Windows.Forms.DataVisualization命名…...

3大核心技巧解锁Office生产力:用Custom UI Editor重塑你的工作界面

3大核心技巧解锁Office生产力&#xff1a;用Custom UI Editor重塑你的工作界面 【免费下载链接】office-custom-ui-editor Standalone tool to edit custom UI part of Office open document file format 项目地址: https://gitcode.com/gh_mirrors/of/office-custom-ui-edit…...

MySQL中如何利用SIGN函数判断符号_MySQL符号函数用法

...

MiGPT终极指南:30分钟将小爱音箱升级为AI语音助手

MiGPT终极指南&#xff1a;30分钟将小爱音箱升级为AI语音助手 【免费下载链接】mi-gpt &#x1f3e0; 将小爱音箱接入 ChatGPT 和豆包&#xff0c;改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 还在为小爱音箱的"人工智障&q…...

从消息传递到GAMP:一个通信工程师的视角,看它如何革新MIMO信号检测

GAMP算法在MIMO信号检测中的革命性突破 1. 通信工程师眼中的GAMP价值 作为一名长期奋战在无线通信一线的工程师&#xff0c;我见证了从传统检测算法到现代近似消息传递技术的演进历程。GAMP&#xff08;Generalized Approximate Message Passing&#xff09;算法之所以能在通信…...

2026实战:Java+YOLO跨平台部署终极指南 从服务器到嵌入式全栈落地

一、为什么我们需要JavaYOLO跨平台部署 在AI视觉落地的今天&#xff0c;Python几乎成了YOLO模型开发的标配语言&#xff0c;但当我们真正要把模型推向生产环境时&#xff0c;Python的短板就暴露无遗了&#xff1a;启动慢、内存占用高、打包分发困难、与现有Java生态集成成本高。…...

picclp32.ocx文件丢失找不到怎么办?免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…...