libxlsxwriter - 编译

文章目录

    • libxlsxwriter - 编译
    • 概述
    • 笔记
    • 编译环境
    • 编译思路
    • 编译
    • 安装组件
    • 写个测试程序, 看看编译的组件是否好使
    • END

libxlsxwriter - 编译

概述

想换一个新版的libxlsxwriter, 自己编译一个出来.
libxlsxwriter依赖zlib, 前面已经成功编译了zlib(zlib - 编译).

笔记

libxlsxwriter的库地址 : https://github.com/jmcnamara/libxlsxwriter.git
迁出到本地
切换到最新的发布版本.
在这里插入图片描述
在这里插入图片描述

编译环境

VS2019 16.11.32
CMAKE version 3.20.21032501-MSVC_2
ZLIB v1.3

编译思路

官方工程中, 并没有对编译过程做详细说明.
这时, 可以看的就是工程自带的CMakeLists.txt 和CMake的官方帮助(https://cmake.org/cmake/help/v3.28/search.html?q=find_package)
在这里插入图片描述
在官方资料中搜索之前, 指定和自己用的CMake差不多的版本.

编译

打开命令行 ‘x64 Native Tools Command Prompt for VS 2019’
进入libxlsxwriter在本地的迁出目录.

cd /d D:\3rd_prj\excel\libxlsxwriter

建立一个编译用的目录并进入

mkdir .\build
cd /d .\build

在工程根目录建立zlib文件夹, 用于放置编译依赖的zlib组件. 主要是用到了存根.lib

mkdir ..\zlib

将自己编译的zlib组件拷贝过去, 最主要就是存根.lib, 这样VS工程就能建立.
其他缺啥, 等打开VS2019工程后, 缺啥补啥, 可以自己改配置.
在这里插入图片描述
CMakeLists.txt 中要找(find_package)的zlib包叫做zlib, 所以要将自己编译的存根.lib(my_zlib_1d3.lib)改名为zlib.lib, 否则CMake编译报错

从源码建立一个VS2019 X64的工程, 并指定ZLIB依赖路径


cmake .. -G "Visual Studio 16 2019" -A x64 -DZLIB_ROOT:STRING=../zlib
D:\3rd_prj\excel\libxlsxwriter\build>cmake .. -G "Visual Studio 16 2019" -A x64 -DZLIB_ROOT:STRING=../zlib
-- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19045.
-- The C compiler identification is MSVC 19.29.30153.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- The CXX compiler identification is MSVC 19.29.30153.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found ZLIB: D:/3rd_prj/excel/libxlsxwriter/zlib/zlib.lib (found version "1.3.#define ZLIB_VERSION "1.3"")
zlib version:
-- Configuring done
-- Generating done
-- Build files have been written to: D:/3rd_prj/excel/libxlsxwriter/build

编译成功了.
打开VS2019工程
在这里插入图片描述
在这里插入图片描述
尝试编译工程, 有啥错误就补啥, 主要是zlib依赖相关.

在这里插入图片描述
将自己编译zlib时的目录拷贝过来, 去掉除了.h之外的文件(*.c, *.rc, *.def).
在这里插入图片描述

再尝试编译
在这里插入图片描述
编译成功了.

安装组件

先尝试全部编译解决方案, 通过.
再编译INSTALL工程
在这里插入图片描述
编译成功后, 就会将.lib, *.h 拷贝到 C:\Program Files\xlsxwriter
在这里插入图片描述
将C:\Program Files\xlsxwriter拷贝到自己的开发目录做存档, 给以后的工程用.

写个测试程序, 看看编译的组件是否好使

代码就用官方的例子.
新建一个VS2019工程, 编译选项为x64 debug, 包含进自己编译的libxlsxwriter和zlib的库, 头, 摆好dll

// testA.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <windows.h>
#include "xlsxwriter.h"
#pragma comment(lib, "xlsxwriter.lib")
#pragma comment(lib, "my_zlib_1d3.lib")

int main()
{
    int i_rc = 0;

    lxw_workbook* workbook = workbook_new("utf8.xlsx");
    lxw_worksheet* worksheet = workbook_add_worksheet(workbook, NULL);

    worksheet_write_string(worksheet, 2, 1, "Это фраза на русском!", NULL);

    i_rc = workbook_close(workbook);

    return S_OK;
}


在这里插入图片描述
在这里插入图片描述
将自己编译的zlib.dll放到exe同级目录, 运行编译出来的exe, 成功. 生成了.xlsx.
在这里插入图片描述
libxlsxwriter工程的编译, 测试 都成功了.

END

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型Transformer 推理 :kvCache原理浅析

大模型Transformer 推理 :kvCache原理浅析 kvCache 原理 在采样时,Transformer模型会以给定的提示/上下文作为初始输入进行推理(可以并行处理),然后逐一生成额外的标记来继续完善生成的序列(体现了模型的自回归性质)。在采样过程中,Transformer会执行自注意力操作,为…

若依 ruoyi-vue3 集成aj-captcha实现滑块、文字点选验证码

目录 0. 前言0.1 说明 1. 后端部分1.1 添加依赖1.2. 修改 application.yml1.3. 新增 CaptchaRedisService 类1.4. 添加必须文件1.5. 移除不需要的类1.6. 修改登录方法1.7. 新增验证码开关获取接口1.8. 允许匿名访问 2. 前端部分&#xff08;Vue3&#xff09;2.1. 新增依赖 cryp…

C++中STL的概念——零基础/小白向,适合竞赛,初学C++者使用

目录 1.STL的诞生 2. STL的基本概念 3. STL六大组件 4. STL容器&#xff0c;算法&#xff0c;迭代器 容器&#xff1a;存放数据的地方 算法&#xff1a;解决问题的方法 迭代器&#xff1a;容器和算法之间的桥梁 5. STL初始&#xff1a;打印0 ~ 9 的数字 这篇文章是一篇…

day34算法训练|贪心算法

1005.K次取反后最大化的数组和 两次贪心算法思路 1. 数组中有负数时&#xff0c;把绝对值最大的负数取反 2. 数组全为非负数时&#xff0c;一直取反最小的那个数 步骤&#xff1a; 第一步&#xff1a;将数组按照绝对值大小从大到小排序&#xff0c;注意要按照绝对值的大小…

云仓酒庄为您甄选西班牙葡萄酒

西班牙是一个拥有悠久葡萄酒酿造与饮用历史的国家&#xff0c;其葡萄酒产量位居世界第三位。云仓酒庄的品牌雷盛红酒分享翻开西班产区地图&#xff0c;不少葡萄酒刚入门的朋友会感到头疼&#xff0c;众多产区、分级制度、陈年标准&#xff0c;想要短时间内搞懂实在不容易。不用…

案例069:基于微信小程序的计算机实验室排课与查询系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

设计模式-状态(State)模式

目录 开发过程中的一些场景 状态模式的简单介绍 状态模式UML类图 类图讲解 适用场景 Java中的例子 案例讲解 什么是状态机 如何实现状态机 SpringBoot状态自动机 优点 缺点 与其他模式的区别 小结 开发过程中的一些场景 我们在平时的开发过程中&#xff0c;经常会…

【C语言(十五)】

动态内存管理 一、为什么要有动态内存分配? 我们已经掌握的内存开辟方式有&#xff1a; int val 20 ; // 在栈空间上开辟四个字节 char arr[ 10 ] { 0 }; // 在栈空间上开辟 10 个字节的连续空间 但是上述的开辟空间的方式有两个特点&#xff1a; • 空间开辟大小是固…

leetcode LCR 173. 点名

代码&#xff1a; class Solution {public int takeAttendance(int[] records) {int left0,rightrecords.length-1;while (left<right){int midleft(right-left)/2;if(midrecords[mid]){leftmid1;}else {rightmid;}}if(leftrecords[left]){return left1;}else {return left…

北斗三号短报文+4G的低功耗太阳能船载报位监控方案

国内海洋船舶群体长期在海上航行&#xff0c;多数海员由于海面无信号覆盖、个人卫星通信费用昂贵、无法自由使用船载公用卫星通信设备等原因&#xff0c;无法与家人和朋友保持联系&#xff0c;甚至在遇到危险的时候也无法及时向外界发出求救信号&#xff0c;管理单位难以掌握船…

新钛云服助力爱达邮轮·魔都号首航,保驾护航,共创辉煌

随着2024年1月1日的临近&#xff0c;中国首艘国产大型邮轮——爱达邮轮魔都号即将迎来激动人心的首航时刻。作为爱达邮轮的IT系统运维和安全服务伙伴&#xff0c;新钛云服有幸提前登船体验&#xff0c;并为魔都号即将到来的航行提供全面的技术支持与保障。 爱达魔都号&#xff…

微积分-三角函数2

三角函数 在上一节中&#xff0c;讨论了如何在直角三角形中定义三角函数&#xff0c;限制让我们扩展三角函数的定义域。 事实上我们可以取任意角的正弦和余弦&#xff0c;而不只是局限于 0 0 0~ π 2 \frac{\pi}{2} 2π​当中。 当然需要注意的是&#xff0c;正切函数对不是对…

Git使用rebase和merge区别

Git使用rebase和merge区别 模拟环境使用merge合并使用rebase 模拟环境 本地dev分支中DevTest增加addRole() 远程dev被同事提交增加了createResource() 使用merge合并 使用idea中merge解决冲突后, 推送远程dev后,日志图显示 使用rebase idea中使用功能rebase 解决冲突…

论文解读 | NeurIPS2023:「解释一切」图像概念解释器

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 讲者简介 孙奥&#xff1a; 香港科技大学软件安全实验室在读博士&#xff0c;研究兴趣为可解释性人工智能和可信机器学习&#xff0c;主要是从Post-hoc&#xff0c;逻辑和概念的角度分析神经网络的机理 Title 「…

IntelliJ IDEA 自带的 HTTP Client接口调用插件,替代 Postman

文章目录 引言建议目录结构新建请求不同环境的变量配置添加环境http-client.env.jsonhttp-client.private.env.json引用变量 请求示例Get请求示例Post请求示例鉴权示例断言示例Websocket请求示例 内置对象和动态变量内置对象&#xff1a;内置变量&#xff1a; 引言 在日常的 W…

Eslint 要被 Oxlint替换了吗

什么是 Oxlint 由于最近的rust在前端领域的崛起,基于rust的前端生态链遭到rust底层重构,最近又爆出OxLint,是一款基于Rust的linter工具。Oxlint在国外前端圈引起热烈讨论,很多大佬给出了高度评价。 事实上,Oxlint 是 Oxc 项目旗下的一款产品,专为 JavaScript 和 TypeSc…

Python轴承故障诊断 (七)基于EMD-CNN-LSTM的故障分类

目录 前言 1 经验模态分解EMD的Python示例 2 轴承故障数据的预处理 2.1 导入数据 2.2 制作数据集和对应标签 2.3 故障数据的EMD分解可视化 2.4 故障数据的EMD分解预处理 3 基于EMD-CNN-LSTM的轴承故障诊断分类 3.1 训练数据、测试数据分组&#xff0c;数据分batch 3.…

TG-5510cb: txo高稳定性+105℃高温

TG-5510CB是一款高稳定性TCXO&#xff0c;可提供CMOS或限幅正弦输出&#xff0c;5G基站和边缘计算的额定温度为85C&#xff0c;需要室外安装、小型化和无风扇运行。与其他TCXO相比&#xff0c;实验室提供了许多改进&#xff0c;如低温度斜率和相位噪声。符合GR-1244-CORE地层3和…

ssm+vue的高校智能培训管理系统分析与设计(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的高校智能培训管理系统分析与设计&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09…

git 常见错误总结(会不断更新中。。)

常见错误 1. 配置部署key后git clone还是拉不下代码 执行以下命令 先添加 SSH 密钥到 SSH 代理&#xff1a; 如果你使用 SSH 代理&#xff08;例如 ssh-agent&#xff09;&#xff0c;将生成的私钥添加到代理中。 ssh-add ~/.ssh/gstplatrontend/id_rsa如果报错以下错误信息…