基于imx6的mupdf交叉编译

本文详细介绍了mupdf 1.15.0版本的交叉编译过程,包括编辑Makerules文件、解决字体库编译错误及静态库生成中遇到的线程库链接问题。通过在目标平台生成并转换字体文件,最终成功编译出所需的libmupdf.a和libmupdf-third.a静态库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mupdf交叉编译(1.15.0源码)
1、解压压缩包;
2、编辑Makerules文件;修改如下:
......
# The following section has various cross compilation configurations.
#
# Invoke these as:
#      make OS=mingw32-cross
#
# This does rely on the generated directory being populated with the font files.
# On a unix-like system, run 'make generate' before doing the cross compile.
# On Windows, run 'nmake -f scripts\fontdump.nmake' in a Visual Studio command prompt.

ifeq "$(OS)" "wasm"
  OUT := build/wasm/$(build)
  CC = emcc
  CXX = em++
  HAVE_GLUT=no
  HAVE_X11=no
  HAVE_OBJCOPY=no
  HAVE_LIBCRYPTO=no
endif

#此处删除了编译器等选项,主要是在make之前,环境变量已经指定了CC、CXX、LD、AR等
ifeq "$(OS)" "imx6-cross"
  CROSSCOMPILE=yes
  HAVE_GLUT := no
endif

ifeq "$(OS)" "mingw64-cross"
  OUT := build/$(OS)/$(build)
  CC = x86_64-w64-mingw32-gcc
  CXX = x86_64-w64-mingw32-g++
  LD = x86_64-w64-mingw32-gcc
  AR = x86_64-w64-mingw32-ar
  WINDRES = x86_64-w64-mingw32-windres
  HAVE_WIN32=yes
endif
......

3、命令行使用make OS=imx6-cross编译。在编译到字体库时,会报错:***/hexdump.exe:Syntax error: word unexpected (expecting ")")(大致是这样), 主要原因是该可执行文件不能在当前环境下运 行,解决方法:把改可执行文件拷贝到板子上,然后手动调用 hexdump.exe -s ***/generated/resource/fonts/(droid/han/noto/sil/urw)/(*.otf.c/*.ttf.c/*.cff.c/*.ttc.c) ***/resource/fonts/(droid/han/noto/sil/urw)/(*.otf/*.ttf/*.cff/*.ttc)。hexdump.exe的作用是把字体转换为c文件。
4、把在板子上生成的字体库c文件全部拷贝到虚拟机。然后修改Makefile文件,注销下面四行:
#generated/%.cff.c : %.cff $(HEXDUMP_EXE) ; $(QUIET_GEN) $(MKTGTDIR) ; $(HEXDUMP_EXE) -s $@ $<
#generated/%.otf.c : %.otf $(HEXDUMP_EXE) ; $(QUIET_GEN) $(MKTGTDIR) ; $(HEXDUMP_EXE) -s $@ $<
#generated/%.ttf.c : %.ttf $(HEXDUMP_EXE) ; $(QUIET_GEN) $(MKTGTDIR) ; $(HEXDUMP_EXE) -s $@ $<
#generated/%.ttc.c : %.ttc $(HEXDUMP_EXE) ; $(QUIET_GEN) $(MKTGTDIR) ; $(HEXDUMP_EXE) -s $@ $<
5、完成上面的步骤后,基本上就可以编译出需要的静态库。但是在编译时也会报错:undefined reference to `pthread_join';undefined reference to `pthread_create'。这个是编译Main tool和viewers时出错,这个错误不影响镜头库的生成,主要两个库libmupdf.a和libmupdf-third.a

MuPDF 项目本身确实包含 `CMakeLists.txt` 文件,因此通常情况下并不需要手动创建。然而,如果用户从 GitHub 拉取的代码库中确实缺少该文件,则可能是由于分支选择错误或未完整下载源码导致的问题。若确认项目缺失 `CMakeLists.txt`,可以参考以下方法进行编译和构建。 ### 使用 Git 获取完整源码 首先确保使用 Git 克隆仓库时指定了正确的分支,并且完整获取了所有子模块。MuPDF 的官方仓库地址为:https://github.com/ArtifexSoftware/mupdf.git[^1]。克隆命令如下: ```bash git clone --recursive https://github.com/ArtifexSoftware/mupdf.git ``` 使用 `--recursive` 参数可确保所有依赖子模块也被正确拉取,其中可能包括必要的 `CMakeLists.txt` 文件。 ### 手动创建 CMakeLists.txt(适用于缺失情况) 如果确实发现项目缺少 `CMakeLists.txt`,可以手动创建以支持 CMake 构建系统。以下是一个基础的 `CMakeLists.txt` 示例,用于构建 MuPDF 可执行文件: ```cmake cmake_minimum_required(VERSION 3.25) project(mupdf) add_compile_options(-gdwarf-4) set(CMAKE_C_STANDARD 23) add_executable(${PROJECT_NAME} main.c) target_link_libraries(${PROJECT_NAME} mupdf mupdf-third freetype openjp2 jbig jbig2dec jpeg harfbuzz gumbo m z pthread iconv ) ``` 此配置假定所有依赖库已通过系统包管理器或本地构建安装完毕,并可通过链接器找到[^1]。 ### 使用 Makefile 进行编译(适用于非 CMake 构建环境) MuPDF 原生也支持基于 `Makefile` 的构建方式。在没有 `CMakeLists.txt` 的情况下,可以通过其自带的 `Makefile` 进行编译。进入项目根目录后,执行以下命令即可开始构建: ```bash make ``` MuPDF 的 `Makefile` 支持多种平台选项,例如指定目标架构、优化级别等。例如,为特定架构启用指令集优化,可以在 `Makefile` 中添加如下配置: ```makefile CFLAGS += -O2 -march=native ``` 此设置将启用 `-O2` 级别的优化并针对本地处理器架构生成代码[^2]。 ### 在 Windows 上使用 vcpkg 管理依赖项 对于 Windows 平台,建议使用 `vcpkg` 工具链来管理第三方依赖库。例如,安装 `freetype`、`openjp2` 等库,可以运行: ```bash vcpkg install freetype openjp2 jbig jbig2dec jpeg harfbuzz ``` 随后,在构建过程中通过 `-DCMAKE_TOOLCHAIN_FILE` 指定 `vcpkg` 的工具链文件,确保依赖项被正确识别和链接: ```bash cmake -DCMAKE_TOOLCHAIN_FILE=C:\code\vcpkg-2025.02.14\scripts\buildsystems\vcpkg.cmake .. ``` 此方式可有效避免因依赖项缺失或版本不匹配导致的编译失败问题[^3]。 ### 针对嵌入式设备(如 Arm IMX6ULL)的交叉编译 对于嵌入式设备上的部署,例如基于 Qt6MuPDF 开发的 PDF 浏览器项目,需要配置交叉编译工具链。确保编译器、链接器路径以及目标平台参数均正确设置,并在 `CMakeLists.txt` 或 `Makefile` 中指定目标架构特性: ```cmake set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER arm-linux-gnueabi-gcc) set(CMAKE_CXX_COMPILER arm-linux-gnueabi-g++) set(CMAKE_FIND_ROOT_PATH /opt/arm-linux-gnueabi) ``` 上述配置可用于为 Arm 架构的 IMX6ULL 开发板编译 MuPDF 应用程序,确保最终二进制文件能够在目标设备上正常运行[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值