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 环境
-
更新 MSYS2:
- 打开任意 MSYS2 终端(如 MSYS 终端):
C:\msys64\msys2_shell.cmd -msys - 更新系统:
pacman -Syu- 若提示关闭终端,关闭后重新打开并再次运行
pacman -Syu。
- 若提示关闭终端,关闭后重新打开并再次运行
- 打开任意 MSYS2 终端(如 MSYS 终端):
-
安装基本工具:
- 在 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
- 在 MSYS 终端安装 autotools:
2. 配置源码
-
进入源码目录:
- 在 MinGW64 终端:
cd /Downloads/libxls-1.6.3/libxls-1.6.3
- 在 MinGW64 终端:
-
生成
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已安装。
- 切换到 MSYS 终端(autotools 需要 POSIX 环境):
3. 配置编译选项
-
打开 MinGW64 终端:
C:\msys64\msys2_shell.cmd -mingw64 cd /Downloads/libxls-1.6.3/libxls-1.6.3 -
配置 Release 版本(默认):
./configure --prefix=/mingw64 MAKE=mingw32-make -
配置 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. 编译
-
清理旧构建(可选):
mingw32-make clean -
编译:
mingw32-make- 注意:若遇到
spawnv类型冲突错误,见下文“常见问题”。
- 注意:若遇到
5. 安装
-
安装库和头文件:
mingw32-make install -
验证输出:
- 检查生成的库:
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.c、test/test.c、test/test2.c和cplusplus/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_PROGRAMS和noinst_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放入项目目录并配置头文件。
- 需用 MSVC 重新编译,或将
总结
以上步骤在你的环境下(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 不可用(我是没找到合适安装包和路径)可通过以下步骤手动转换)
- 生成 .def 文件:
gendef libxlsreader-8.dll
- 使用 dlltool 生成 .lib:
dlltool -d libxlsreader.def -D libxlsreader.dll -l libxlsreader.lib -k
相关文章:
libxls库的编译以及基于Visual studio的配置
最近有一个需求在windows处理xls,所以就需要libxls这个库,调查了一下,基于C的库的解析情况如下: 所以最理想的就是Libxlsd个开源的方案 基于历史整理的 libxls 在 MinGW 下的编译步骤 前提条件 系统:Windows&#…...
抗辐照加固CAN FD芯片的商业航天与车规级应用解析
在工业自动化、智能汽车、航空航天及国防装备等关键领域,数据传输的安全性、可靠性与极端环境适应能力是技术升级的核心挑战。国科安芯推出全新一代CANFD(Controller Area Network Flexible Data Rate)芯片,以高安全、高可靠、断电…...
Python教学-最常用的标准库之一——OS库
os 库是 Python 标准库中的一个模块,它提供了一种方便的方式来使用操作系统相关的功能。os 模块提供了很多函数,可以用来处理文件和目录、访问环境变量、执行系统命令等。以下是一些常用的 os 模块的功能和示例: 1. 文件和目录操作 1.1 当前…...
Ollama+Deepseek+AnythingLLM搭建本地知识库
OllamaDeepseek的配置可以参考OllamaDeepseekopen-webui搭建本地知识库-CSDN博客 一,AnythingLLM安装 AnythingLLM官网地址AnythingLLM | The all-in-one AI application for everyone 下载 win64 下载完毕后安装。 二,AnythingLLM 配置 新建工作区 …...
合并区间(56)
56. 合并区间 - 力扣(LeetCode) 解法: class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {if (intervals.size() 1) {return intervals;}//现根据每一项的第一个值&#…...
再探动态规划--背包问题
背包问题常见类型: 动态规划问题核心就两个:状态转移方程和遍历顺序 如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。 状态转移方程是动态规划问题中的核心&…...
Javascript使用Sodium库实现 aead_xchacha20poly1305_ietf加密解密,以及与后端的密文交互
Node.js环境安装 sodium-native (其他库可能会出现加密解密失败,如果要使用不一样的库,请自行验证) npm install sodium-native 示例代码,使用的是 sodium-native v4.3.2 (其他版本可能会有变化,如果要使用,请自行验…...
力扣-贪心-376 摆动序列
思路 记录前一个差值和后一个差值,需要分析很多情况 只有在发生波动的时候才更新差值——单调中有平坡前一个差值0时也更新差值——平坡留下最左边元素最后一个元素不记录.默认从最后一个有坡度 代码 class Solution { public:int wiggleMaxLength(vector<in…...
什么是“可迭代”
在 Python 中,“可迭代”(Iterable)是一个非常重要的概念,它指的是任何可以被逐个访问其元素的对象。换句话说,如果一个对象支持迭代操作(比如可以通过 for 循环逐个访问其元素),那么…...
【算法与数据结构】单调队列
目录 单调队列 使用单调队列维护滑动窗口 具体过程: 代码实现: 复杂度分析: 使用单调队列优化动态规划 例题 单调队列 单调队列(deque)是一种特殊的队列,队列中的元素始终按严格递增或者递减排列。这样就可以保证队头元素…...
Mysql-------事务
事务 一、事务 (一)什么是事务: MySQL数据库事务:(database transaction): 事务是由一组SQL语句组成的逻辑处理单元,这些操作要么全做要么全不做,是一个不可分割的工作单位。 ※…...
【Java进阶学习 第五篇】JDK8、9中的接口新特性
接口新特性 可以提升代码的复用性,减少冗余 JDK8中接口的新特性主要可以允许调用默认方法和静态方法;JDK9中接口的新特性为可以运行调用私有方法供本类方法使用 JDK8新特性 接口中可以定义有方法体的方法(默认或静态) 允许调用…...
TypeScript学习:初学
安装等配置指令 安装TypeScript npm i typescript -g 检查版本 tsc -v npx tsc -v 运行ts文件及js文件 npx tsc 文件名.ts node 文件名.js 安装ts-node脚手架 npm i ts-node -g 检查脚手架版本 npx ts-node -v 初始化ts状态 npx tsc -- init 使用脚手架运行ts文件…...
基于Martin的全国基础底图实现
概述 前面有文章基于Martin实现MapboxGL自定义底图分享了Martin的使用,本文使用网络收集的数据实现了全国基础数据的收集和基础底图。 实现后效果 实现 1. 数据准备 实例中包含如下数据: 边界线和九段线数据省边界面数据省会城市点数据市边界面数据…...
网络安全:防范NetBIOS漏洞的攻击
稍微懂点电脑知识的朋友都知道,NetBIOS 是计算机局域网领域流行的一种传输方式,但你是否还知道,对于连接互联网的机器来讲,NetBIOS是一大隐患。 漏洞描述 NetBIOS(Network Basic Input Output System,网络基本输入输…...
一周学会Flask3 Python Web开发-客户端状态信息Cookie以及加密
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili HTTP是无状态(stateless)协议。也就是说,在一次请求响应结束后,服务器不会留下任何关于对…...
机器学习面试八股文——决战金三银四
大家好,这里是好评笔记,公主 号:Goodnote,专栏文章私信限时Free。本笔记的任务是解读机器学习实践/面试过程中可能会用到的知识点,内容通俗易懂,入门、实习和校招轻松搞定。 公主号合集地址 点击进入优惠地…...
Visual studio 2022 将打开文件的方式由单击改为双击
1. 打开vs2022,选择Tools -> Options打开Options设置页面 2. 在左侧依次展开Environment, 选择Tabs and Windows 3. 在右侧面板往下拖拽滚动条,找到Preview Tab section, unchecked "Preview selected files in Solution Explorer (Altclick t…...
【Akashic Records】THE EGG
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Akashic Records 文章目录 💯观后感一、宇宙的孤寂与个人成长:二、选择与责任:三、灵性与世界的连接:四、选择如何改变命运:结语: 💯…...
Tio-Boot 集成 Spring Boot 实现即时通讯功能全解析
Tio-Boot 集成 Spring Boot 实现即时通讯功能全解析(详细版) 一、Tio-Boot 简介 Tio-Boot 是基于 Tio 框架的 Spring Boot Starter 扩展,提供高性能、低延迟的网络通信能力,支持 TCP/UDP 协议及 WebSocket 协议,适用…...
从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(一)
项目包含5个模块 1.首页 (聊天主页) 2.注册 3.登录 4.个人资料 5.设置主题 一、配置开发环境 建立项目文件夹 mkdir chat-project cd chat-project mkdir server && mkdir webcd server npm init cd web npm create vitelatest 创建前端项目时我们选择javascrip…...
ant design 疑惑记录 Dropdown.Button
onMenuClick是点击展开的 子项的点击事件 Actions的点击事件是什么? 解答: 也是个按钮Button,也有自己的onClick事件 const onMenuClick (e) > {console.log(click, e); }; const otherClick (e) > {console.log(其他操作主按钮…...
Perplexity AI:通过OpenAI与DeepSeek彻底革新搜索和商业策略
在不断发展的AI领域,Perplexity AI已经成为一个独特的力量,正在重塑我们搜索信息的方式。 通过结合前沿的AI工具,Perplexity提供了更智能、更像人类的搜索体验。那么,这个平台与竞争对手有何不同呢? 让我们一起探索Perplexity的商业策略、它如何通过变现服务以及如何利用…...
什么是Firehose?它的作用是什么?
目录 1. Firehose 的作用 2. Firehose 文件(prog_firehose.mbn) 如何获取 Firehose 文件? 3. Firehose 模式(EDL Mode) 如何进入 EDL 模式? 4. Firehose 命令(低级操作) 5. F…...
rkipc main.c 中 rk_param_init函数分析
rk_param_init函数 这个函数是用来读取配置文件进行参数配置 这个函数在 luckfox-pico/project/app/rk_smart_door/smart_door/common/uvc/param/param.c 中 这个函数在main函数中被调用 //通过-c 配置文件路径 把配置文件传进来 case c:rkipc_ini_path_ optarg;//调用&am…...
SAP on Microsoft Azure Architecture and Administration (Ravi Kashyap)
SAP on Microsoft Azure Architecture and Administration (Ravi Kashyap)...
Missing required prop: “maxlength“
背景: 封装一个使用功能相同使用频率较高的input公共组件作为子组件,大多数长度要求为200,且实时显示统计子数,部分input有输入提示。 代码实现如下: <template><el-input v-model"inputValue" t…...
在windows下安装windows+Ubuntu16.04双系统(下)
这篇文章的内容主要来源于这篇文章,为正式安装windowsUbuntu16.04双系统部分。在正式安装前,若还没有进行前期准备工作(1.分区2.制作启动u盘),见《在windows下安装windowsUbuntu16.04双系统(上)》 二、正式安装Ubuntu …...
数据库驱动免费下载(Oracle、Mysql、达梦、Postgresql)
数据库驱动找起来好麻烦,我整理到了一起,需要的朋友免费下载:驱动下载 目前收录了Oracle、Mysql、达梦、Postgresql的数据库驱动的多个版本,后续可能会分享更多。...
业务流程相关的权威认证和培训有哪些
业务流程的认证和培训种类繁多,旨在帮助专业人士掌握业务流程管理 (BPM) 的知识和技能,从而提升个人职业发展和组织运营效率。下面分别介绍: 一、 业务流程认证和培训的种类 业务流程的认证和培训可以大致分为以下几类,涵盖了不…...
