1.ZLIB静态编译
1.解压:
tar -xvf zlib-1.2.11.tar.gz
2.修改CMakeLists.txt文件,新增:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
注意:编译静态库需要添加-fPIC,否则动态库链接该静态库的时候会提示出错
(relocation R_X86_64_32 against)。
3. cmake .
4. make install
2. libusb静态编译
https://blog.csdn.net/gd6321374/article/details/79903132
注意:静态编译添加-fPIC,进入libusb源码目录修改Makefile中的CFLAGS(不是根目录的Makefile,别找错了)
3. mupdf静态编译
-
修改Makefile中的CFLAGS,添加-fPIC
-
解压进入目录,执行sudo make generate
-
sudo make
-
源码自带pdf转png例子路径(不同版本接口有差异):docs/example.c
3.1 mupdf-1.18版本,pdf转png:
// 拷贝源码:/source/tools/mudraw.c
//gcc -o example mudraw.c example.c libmupdf.a libmupdf-third.a -lm
#include "include/fitz.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//mudraw.c实现
int mudraw_main(int argc, char *argv[]);
int main(int argc, char **argv)
{
char **c = (char**)malloc(5 * sizeof(char*));
for (int i = 0; i < 5; ++i){
c[i] = (char *)malloc(1024);
}
c[0] = "./exampl12";//随便填必须要有
c[1] = "-o";//输出参数
c[2] = "%d.png"; //输出图片
c[3] = "t.pdf";//pdf文件
//c[4] = "1-3";//要转换的页码,不填默认转换整个pdf文件(第一个参数填4)
int ret = mudraw_main(4,c);
printf("ret=%d\r\n",ret);
return 0;
}
3.2 获取pdf文档页数:
#include "include/fitz.h"
#include "include/pdf.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
static pdf_document *doc = NULL;
static fz_context *ctx = NULL;
int get_pdf_pages(char *filename)
{
ctx = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED);
if (!ctx)
{
fprintf(stderr, "cannot initialise context\n");
return -1;
}
fz_var(doc);
fz_try(ctx)
{
doc = pdf_open_document(ctx, filename);
}
fz_catch(ctx)
{
fprintf(stderr, "cannot open document\n");
return -2;
}
//获取页数
int pages = pdf_count_pages(ctx, doc);
pdf_drop_document(ctx, doc);
fz_drop_context(ctx);
return pages;
}
int main(int argc, char **argv)
{
int ret = get_pdf_pages("t.pdf");
printf("total pages = %d\r\n",ret);
return 0;
}
注意: mupdf和opencv都存在jpeg库函数重复定义,解决方法(删除静态库重复定义的执行文件):ar d libmupdf-third.a jutils.o
linux下查看修改静态库