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

news2025/5/16 23:03:25

最近有一个需求在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2303915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抗辐照加固CAN FD芯片的商业航天与车规级应用解析

在工业自动化、智能汽车、航空航天及国防装备等关键领域&#xff0c;数据传输的安全性、可靠性与极端环境适应能力是技术升级的核心挑战。国科安芯推出全新一代CANFD&#xff08;Controller Area Network Flexible Data Rate&#xff09;芯片&#xff0c;以高安全、高可靠、断电…

Ollama+Deepseek+AnythingLLM搭建本地知识库

OllamaDeepseek的配置可以参考OllamaDeepseekopen-webui搭建本地知识库-CSDN博客 一&#xff0c;AnythingLLM安装 AnythingLLM官网地址AnythingLLM | The all-in-one AI application for everyone 下载 win64 下载完毕后安装。 二&#xff0c;AnythingLLM 配置 新建工作区 …

再探动态规划--背包问题

背包问题常见类型&#xff1a; 动态规划问题核心就两个&#xff1a;状态转移方程和遍历顺序 如果求组合数就是外层for循环遍历物品&#xff0c;内层for遍历背包。如果求排列数就是外层for遍历背包&#xff0c;内层for循环遍历物品。 状态转移方程是动态规划问题中的核心&…

Javascript使用Sodium库实现 aead_xchacha20poly1305_ietf加密解密,以及与后端的密文交互

Node.js环境安装 sodium-native (其他库可能会出现加密解密失败&#xff0c;如果要使用不一样的库&#xff0c;请自行验证) npm install sodium-native 示例代码&#xff0c;使用的是 sodium-native v4.3.2 (其他版本可能会有变化&#xff0c;如果要使用&#xff0c;请自行验…

【算法与数据结构】单调队列

目录 单调队列 使用单调队列维护滑动窗口 具体过程&#xff1a; 代码实现&#xff1a; 复杂度分析&#xff1a; 使用单调队列优化动态规划 例题 单调队列 单调队列(deque)是一种特殊的队列&#xff0c;队列中的元素始终按严格递增或者递减排列。这样就可以保证队头元素…

Mysql-------事务

事务 一、事务 &#xff08;一&#xff09;什么是事务&#xff1a; MySQL数据库事务&#xff1a;&#xff08;database transaction&#xff09;: 事务是由一组SQL语句组成的逻辑处理单元&#xff0c;这些操作要么全做要么全不做&#xff0c;是一个不可分割的工作单位。 ※…

基于Martin的全国基础底图实现

概述 前面有文章基于Martin实现MapboxGL自定义底图分享了Martin的使用&#xff0c;本文使用网络收集的数据实现了全国基础数据的收集和基础底图。 实现后效果 实现 1. 数据准备 实例中包含如下数据&#xff1a; 边界线和九段线数据省边界面数据省会城市点数据市边界面数据…

网络安全:防范NetBIOS漏洞的攻击

稍微懂点电脑知识的朋友都知道&#xff0c;NetBIOS 是计算机局域网领域流行的一种传输方式&#xff0c;但你是否还知道&#xff0c;对于连接互联网的机器来讲&#xff0c;NetBIOS是一大隐患。 漏洞描述 NetBIOS(Network Basic Input Output System&#xff0c;网络基本输入输…

一周学会Flask3 Python Web开发-客户端状态信息Cookie以及加密

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili HTTP是无状态&#xff08;stateless)协议。也就是说&#xff0c;在一次请求响应结束后&#xff0c;服务器不会留下任何关于对…

机器学习面试八股文——决战金三银四

大家好&#xff0c;这里是好评笔记&#xff0c;公主 号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本笔记的任务是解读机器学习实践/面试过程中可能会用到的知识点&#xff0c;内容通俗易懂&#xff0c;入门、实习和校招轻松搞定。 公主号合集地址 点击进入优惠地…

【Akashic Records】THE EGG

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Akashic Records 文章目录 &#x1f4af;观后感一、宇宙的孤寂与个人成长&#xff1a;二、选择与责任&#xff1a;三、灵性与世界的连接&#xff1a;四、选择如何改变命运&#xff1a;结语&#xff1a; &#x1f4af;…

从零开始用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的点击事件是什么&#xff1f; 解答&#xff1a; 也是个按钮Button&#xff0c;也有自己的onClick事件 const onMenuClick (e) > {console.log(click, e); }; const otherClick (e) > {console.log(其他操作主按钮…

SAP on Microsoft Azure Architecture and Administration (Ravi Kashyap)

SAP on Microsoft Azure Architecture and Administration (Ravi Kashyap)

Missing required prop: “maxlength“

背景&#xff1a; 封装一个使用功能相同使用频率较高的input公共组件作为子组件&#xff0c;大多数长度要求为200&#xff0c;且实时显示统计子数&#xff0c;部分input有输入提示。 代码实现如下&#xff1a; <template><el-input v-model"inputValue" t…

在windows下安装windows+Ubuntu16.04双系统(下)

这篇文章的内容主要来源于这篇文章&#xff0c;为正式安装windowsUbuntu16.04双系统部分。在正式安装前&#xff0c;若还没有进行前期准备工作&#xff08;1.分区2.制作启动u盘&#xff09;&#xff0c;见《在windows下安装windowsUbuntu16.04双系统(上)》 二、正式安装Ubuntu …

数据库驱动免费下载(Oracle、Mysql、达梦、Postgresql)

数据库驱动找起来好麻烦&#xff0c;我整理到了一起&#xff0c;需要的朋友免费下载&#xff1a;驱动下载 目前收录了Oracle、Mysql、达梦、Postgresql的数据库驱动的多个版本&#xff0c;后续可能会分享更多。

业务流程相关的权威认证和培训有哪些

业务流程的认证和培训种类繁多&#xff0c;旨在帮助专业人士掌握业务流程管理 (BPM) 的知识和技能&#xff0c;从而提升个人职业发展和组织运营效率。下面分别介绍&#xff1a; 一、 业务流程认证和培训的种类 业务流程的认证和培训可以大致分为以下几类&#xff0c;涵盖了不…

vivado修改下载器下载速率

Error Launching Program X Error while launching program: fpga configuration failed. DONE PIN is not HIGH 原因是下载器速度太快了。先从任务管理器中关闭hw_server.exe试一下,要是不行就按下面三种方法解决。 第一种方法可以不用修改下载速度,直接先从vivado中将bit流…

巧妙实现右键菜单功能,提升用户操作体验

在动态交互式图库中&#xff0c;右键菜单是一项能够显著提升用户操作便捷性的功能。它的设计既要响应用户点击位置&#xff0c;又需确保菜单功能与数据操作紧密结合&#xff0c;比如删除图片操作。以下将通过一段实际代码实现&#xff0c;展示从思路到实现的详细过程。 实现右键…