AI摘要:本文介绍了如何在嵌入式Linux系统中移植Imagemagick工具以实现图片转换功能。首先,需要交叉编译并移植依赖的libbz2库,包括下载源码、修改Makefile文件、设置交叉编译环境和编译安装。接着,对Imagemagick进行交叉编译,设置编译选项并安装。最后,将转换工具和库文件拷贝到目标系统并进行测试。文章提供了详细的命令和配置步骤,以及相关参考链接。

Powered by AISummary.

项目中遇到图片转换,需要图片另存为功能.

通过查阅资料,Imagemagickconvert命令工具可以实现图片转换;但是需要把Imagemagick 工具移植到嵌入式linux系统中;

libbz2 库的交叉编译及移植

Imagemagick 采用的是ImageMagick-7.0.10-30,依赖libbz2.so.0;所以先在ubuntu 14.0系统上交叉编译libbz2库。

下载bzip2-1.0.6.tar.zip

下载路径12

交叉编译参考

网上的例子3

在arm平台下使用boost库.

修改Makefile文件
SHELL=/bin/bash

To assist in cross-compiling

CC=/home/frp/code/third_libs/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
AR=/home/frp/code/third_libs/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ar
RANLIB=/home/frp/code/third_libs/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ranlib
LDFLAGS=

BIGFILES=-D_FILE_OFFSET_BITS=64
CFLAGS=-Wall -Winline -O2 -g $(BIGFILES)

Where you want it installed when you do 'make install'

PREFIX=/home/frp/code/third_libs/bzip2-1.0.6/install

OBJS= blocksort.o  \
      huffman.o    \
      crctable.o   \
      randtable.o  \
      compress.o   \
      decompress.o \
      bzlib.o

all: libbz2.a bzip2 bzip2recover

bzip2: libbz2.a bzip2.o
    $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2 bzip2.o -L. -lbz2

bzip2recover: bzip2recover.o
    $(CC) $(CFLAGS) $(LDFLAGS) -o bzip2recover bzip2recover.o

使用bzip2-1.0.6版本,上面的代码为Makefile文件中的部分(修改后的).

修改了SHELL=后的sh为bash,不修改的话会报如下错误:

Doing 6 tests (3 compress, 3 uncompress) …
If there’s a problem, things might stop at this point.
./bzip2 -1 < sample1.ref > sample1.rb2
./bzip2: 1: ./bzip2: Syntax error: word unexpected (expecting “)”)
Makefile:57: recipe for target ‘test’ failed
make: *** [test] Error 2

修改CC=,AR=,RANLIB=为实际的交叉编译链中gcc,ar,ranlib的路径
修改PREFIX=为要安装位置,如果默认的话可能会覆盖系统的这些库(没试过)
去掉all后面的test,测试老是不通过,猜想可能是于实际平台不符导致的

项目实战

需要先把交叉编译环境source

然后修改交叉编译链

CC=arm-oe-linux-gnueabi-gcc
AR=arm-oe-linux-gnueabi-ar
RANLIB=arm-oe-linux-gnueabi-ranlib

修改PREFIX=

去掉test: bzip2后面的
然后操作 make ;make stall

这个操作是编译静态库。

  1. 修改Makefile-libbz2_so
  2. 修改CC=arm-oe-linux-gnueabi-gcc
  3. 修改动态库为libbz2.so.0 链接库 libbz2.so.0.1
  4. 执行make -f Makefile-libbz2_so 编译动态库

编译安装 make&make install
将libbze.so.0拷到到终端/usr/lib 下

这个操作是生成动态库。

Imagemagick交叉编译移植45

先执行source,导出交叉编译工具,然后 执行以下命令

tar -xzvf ImageMagick.tar.gz
cd ImageMagick
mkdir build
cd build   

../configure --prefix=$PWD/__install --disable-installed --without-perl --without-x --without-fpx --without-wmf --disable-openmp --host=arm-oe-linux-gnueabi
make
make install

测试如下:

在build/install/bin目录下拷贝convert magick工具到终端/usr/bin
在build/install/lib目录下拷贝 libMagickCore-7.Q16HDRI.so.7 libMagickWand-7.Q16HDRI.so.7两个库到终端/usr/lib目录下
测试 convert 4.jpg 5.jpg

Reference

Last modification:July 15, 2022
文章免费,无需打赏