如何在不安装gnuWin32的情况下为libarchive增加zlib支持
来源:互联网 发布:视频一对一聊天软件 编辑:程序博客网 时间:2024/05/01 21:22
libarchive在windows下编译先要用cmake来生成vc的项目文件,cmake仅能找到gnuwin32中安装的zlib头文件和库文件。在不安装gnuwin32而又想加入zlib支持,可通过如下方法手工加入到项目文件中。
1. 先用cmake生成项目文件,cmake会提示找不到zlib库。
2. 下载zlib的源代码并用VC进行编译。
3. 将zlib.h 和 zconf.h 拷贝到 libarchive源代码目录,zlib.lib, zdll.lib拷贝到cmake生成的项目文件所在目录。
3. 用visual studio 打开cmake生成的libarchive项目文件,加入 HAVE_ZLIB_H宏定义,以及zlib.lib库连接,进行编译即可。
libarchive增加了zlib支持,可以将内存中的ZIP格式数据解压,如下为示例代码:
typedef struct {
size_t size;
char buf[0];
} curl_wbuf_t;
curl_wbuf_t *curl_wbuf;
int read_archive_data(struct archive *ar)
{
int r;
const char *buff;
size_t size;
la_int64_t offset;
for (;;) {
r = archive_read_data_block(ar, &buff, &size, &offset);
if (r == ARCHIVE_EOF) {
return (ARCHIVE_OK);
}
if (r != ARCHIVE_OK) {
fprintf(stderr, "archive_read_data_block: %s, %d\n",
archive_error_string(ar), r);
return (r);
}
fprintf(stdout, "%s: buf=%lx,size=%x,offset=%x\n",
__func__, (DWORD)buff, size, (DWORD)offset);
// fprintf(stdout, ">>>>>>>>>>%.*s<<<<<<<<<<", size, buff);
}
}
int uncompress_szselist(curl_wbuf_t *wbuf)
{
struct archive_entry *entry;
struct archive *a;
int r;
fprintf(stdout, "%s: buf size = %d\n", __func__, wbuf->size);
a = archive_read_new();
archive_read_support_format_zip(a);
r = archive_read_open_memory(a, wbuf->buf, wbuf->size);
if(r) {
fprintf(stderr, "archive_read_open_memory: %s, %d\n",
archive_error_string(a), r);
return r;
}
for (;;) {
r = archive_read_next_header(a, &entry);
if (r == ARCHIVE_EOF)
break;
if (r != ARCHIVE_OK)
fprintf(stderr, "archive_read_next_header(): %s, %d\n",
archive_error_string(a), r);
else {
const char *pathname = archive_entry_pathname(entry);
if(0 == strcmp(pathname, "xl/worksheets/sheet1.xml"))
read_archive_data(a);
}
}
archive_read_close(a);
archive_read_free(a);
return 0;
}
- 如何在不安装gnuWin32的情况下为libarchive增加zlib支持
- 如何在不联网的情况下安装 Silverlight Tools
- 如何在不联网的情况下安装 Silverlight Tools
- 在不增加新的变量情况下,值互换
- Windows环境下,使用GnuWin32工具安装后缀为patch的补丁到C源码软件包
- 在不增加swap分区的情况下使用swap文件来增加swap
- 在Windows下使用Linux命令 gnuwin32项目的安装与使用
- 如何在不安装VC2008发布包的情况下,发布VC2008生成的程序
- 如何绕过 Appstore 做到在不需越狱的情况下安装盗版软件的?
- 为 SELECT 对象增加或删除选项的方法在各浏览器中的支持情况不同
- 如何在不安装Oracle Client的情况下使用PL/SQL Developer
- 如何在不安装Word的情况下生成Word文档 ——转【陈希章】
- 如何在不安装Word的情况下生成Word文档
- 如何在不安装Word的情况下生成Word文档
- 如何在不安装Oracle客户端的情况下,使用PL/SQL Developer连接数据库
- 如何在不安装OPENCV MANAGER情况下进行android手机跑OPENCV+ANDROID的程序
- 如何在不安装Oracle客户端的情况下,使用PL/SQL Developer连接数据库
- 如何在不安装JMF软件包的情况下使用JMF
- BZOJ 1798 [Ahoi2009]Seq 维护序列seq 线段树模板
- 我所理解的微服务
- 安卓之旅
- NumPy函数库基础
- ubuntu 源、codename 与 sources.list 文件
- 如何在不安装gnuWin32的情况下为libarchive增加zlib支持
- Codeforces Gym 101201G Maximum Islands (dfs求联通块+最大独立集)
- lock
- uva 818 Cutting Chains
- 用户态访问I2C设备
- angvec2r
- Redis学习日志(一)
- 从github上下载的项目无法在android studio中打开的解决办法
- 兑换积分