当前位置: 首页 > 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

相关文章:

  • Qt开发中有关内存管理方面常见的问题分析与解决方案
  • 简讯:Rust 2024 edition and v1.85.0 已发布
  • 【Shell编程 / 9】脚本实战项目:从基础到进阶的自动化管理方案
  • uniapp修改picker-view样式
  • 什么是“可迭代”
  • Springboot的简单推荐实现
  • 机器学习面试八股文——决战金三银四
  • wsl配置
  • 提升C++项目编译速度
  • LDR6020 驱动的一拖多快充线,革新充电体验
  • DeepSeek 助力 Vue 开发:打造丝滑的二维码生成(QR Code)
  • 【Java基础-49.1】Java线程池之FixedThreadPool:使用、原理与应用场景详解
  • 如何调整CAN位宽容忍度?
  • 一个解析cyber record文件的python示例脚本
  • HC32F460_BootLoader
  • 构建智能AI数字人:一站式源码开发指南
  • 【Http和Https区别】
  • 企业数据集成:实现高效调拨出库自动化
  • excel中VBA宏的使用方法?
  • 水果生鲜农产品推荐系统 协同过滤余弦函数推荐水果生鲜农产品 Springboot Vue Element-UI前后端分离 代码+开发文档+视频教程
  • 新任美国驻华大使庞德伟抵京履职,外交部回应
  • 杨文庄当选中国人口学会会长,曾任国家卫健委人口家庭司司长
  • 75万买299元路由器后续:重庆市纪委、财政局、教委联合调查
  • 商务部就开展打击战略矿产走私出口专项行动应询答记者问
  • 射箭世界杯上海站摘得两银,中国队新周期冲击韩国缩小差距
  • 图集︱“中国排面”威武亮相