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 终端):

      bash 复制代码
      C:\msys64\msys2_shell.cmd -msys
    • 更新系统:

      bash 复制代码
      pacman -Syu
      • 若提示关闭终端,关闭后重新打开并再次运行 pacman -Syu
  2. 安装基本工具

    • 在 MSYS 终端安装 autotools:

      bash 复制代码
      pacman -S autoconf automake libtool autoconf-archive make
    • 在 MinGW64 终端安装编译器:

      bash 复制代码
      C:\msys64\msys2_shell.cmd -mingw64
      pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-make
2. 配置源码
  1. 进入源码目录

    • 在 MinGW64 终端:

      bash 复制代码
      cd /Downloads/libxls-1.6.3/libxls-1.6.3
  2. 生成 configure 文件

    • 切换到 MSYS 终端(autotools 需要 POSIX 环境):

      bash 复制代码
      C:\msys64\msys2_shell.cmd -msys
      cd /Downloads/libxls-1.6.3/libxls-1.6.3
    • 运行:

      bash 复制代码
      autoreconf -i
    • 注意 :若报错(如 AX_CXX_COMPILE_STDCXX_11),确保 autoconf-archive 已安装。

3. 配置编译选项
  1. 打开 MinGW64 终端

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

    bash 复制代码
    ./configure --prefix=/mingw64 MAKE=mingw32-make
  3. 配置 Debug 版本

    • 添加调试符号并禁用优化:

      bash 复制代码
      ./configure --prefix=/mingw64 MAKE=mingw32-make CFLAGS="-g -O0" CXXFLAGS="-g -O0" LDFLAGS="-g"
    • 可选 :若需静态库:

      bash 复制代码
      ./configure --prefix=/mingw64 --disable-shared --enable-static MAKE=mingw32-make CFLAGS="-g -O0" CXXFLAGS="-g -O0"
4. 编译
  1. 清理旧构建(可选):

    bash 复制代码
    mingw32-make clean
  2. 编译

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

    bash 复制代码
    mingw32-make install
  2. 验证输出

    • 检查生成的库:

      bash 复制代码
      ls /mingw64/bin/libxlsreader-8.dll  # 动态库
      ls /mingw64/lib/libxlsreader.dll.a  # 导入库
      ls /mingw64/lib/libxlsreader.la     # Libtool 元数据
    • 检查头文件:

      bash 复制代码
      ls /mingw64/include/libxls
    • Debug 版本验证:

      bash 复制代码
      objdump -h /mingw64/bin/libxlsreader-8.dll | grep debug

常见问题及解决

1. make: command not found
  • 现象 :运行 make 时出错。

  • 解决

    bash 复制代码
    pacman -S mingw-w64-x86_64-make
    alias make='mingw32-make'  # 临时别名
    • 或直接用:

      bash 复制代码
      ./configure --prefix=/mingw64 MAKE=mingw32-make
      mingw32-make

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

bash 复制代码
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

      bash 复制代码
      pacman -S autoconf-archive  # 在 MSYS 或 MinGW64 终端
    • 重新运行:

      bash 复制代码
      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

        c 复制代码
        - 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,替换为:

        c 复制代码
        #include <process.h>
    • 禁用测试程序和 xls2csv (推荐,若只需库):

      • 编辑 Makefile.am

        makefile 复制代码
        #bin_PROGRAMS = xls2csv
        #noinst_PROGRAMS = test_libxls test2_libxls
        #if HAVE_CXX11
        #noinst_PROGRAMS += test_cpp
        #endif
      • 重新生成:

        bash 复制代码
        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):

    c 复制代码
    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

  2. 使用 dlltool 生成 .lib:

    dlltool -d libxlsreader.def -D libxlsreader.dll -l libxlsreader.lib -k

相关推荐
waicsdn_haha2 小时前
Visual Studio Code 2025 安装与高效配置教程
c语言·ide·windows·vscode·微软·编辑器·win7
树欲静而风不止慢一点吧7 小时前
Visual Studio 2022配置网址参考
ide·visual studio
AnalogElectronic8 小时前
问题记录,在使用android studio 构建项目时遇到的问题
android·ide·android studio
云道轩10 小时前
为Eclipse IDE安装插件IBM编程助手watsonx Code Assistant
ide·eclipse·ibm数据与人工智能
泡泡Java12 小时前
使用WebStorm开发Vue3项目
ide·rust·webstorm
Earth explosion20 小时前
ide使用技巧与插件推荐
ide
dringlestry20 小时前
pycharm将当前项目上传到github
ide·pycharm·github
明月清风徐徐1 天前
Miniconda + VSCode 的Python环境搭建
ide·vscode·python
郑祎亦1 天前
IDE(集成开发环境)
ide