libjpeg库移植
- 下载源码jpegsrc.v9.tar.gz与准备交叉工具链
- 解压源码并进入解压后的目录。
1.配置:
/opt/libdecode 是自定义的文件夹,用来存放.so .a和头文件
arm-none-linux-gnueabi 是交叉编译工具,改成自己的
./configure --prefix=/opt/libdecode --host=arm-none-linux-gnueabi
执行之后会生成Makefile
2.修改 Makefile:
CC=gcc 改为 CC=arm-linux-gcc
AR=ar rc 改为 AR=arm-linux-ar rc
AR2=ranlib 改为 AR2=arm-linux-ranlib
arm-linux-gcc是自己的交叉编译工具名,如果没有导出到环境变量,则需要写成全路径
参考:Ubuntu交叉编译工具链导出到环境变量
确认是否存在/opt/libdecode /include与/opt/libdecode/lib两个目录,若不存在则创建。
3.执行make
4.执行make install-lib 将编译生成的库文件、头文件、可执行文件分别装载到–prefix --exec-prefix所指定的那些目录中去
libjpeg就移植完成了
移植完成后.so文件存放在/opt/libdecode/lib中
头文件存放在/opt/libdecode /include中
部署:
动态库.so文件放到开发板的根文件系统中(动态链接,运行时需要)去,把静态库.a文件和头文件.h文件放到ubuntu的文件系统中(编译和静态链接用)即可。
使用:
在编译包含了libjpeg的工程时,
必须指定 -I(大写i) /opt/libdecode/include,
CFLAGS += -I $(shell pwd)/include -I/opt/libdecode/include
同时在链接时需指定 -L /opt/libdecode/lib,
LDFLAGS := -ljpeg -L/opt/libdecode/lib
部署动态库
(1)第一种情况:放到/lib或者/usr/lib下,这样不需要给系统指定库路径,就能自动找到。(开发板挂载的根文件系统)
(2)第二种情况:对于一些不常用的库,找个自定义的第三方的目录,单独将这些不常用的库放置,然后将该自定义第三方目录导出到环境变量LD_LIBRARY_PATH下。
如自定义/opt/mylib ,开发板运行起来后在命令行低下输入
export LD_LIBRARY_PATH=/opt/mylib:$LD_LIBRARY_PATH
可用echo $LD_LIBRARY_PATH查看是否导出
另:可以写个shell脚本来执行
三个编译链接选项:-I -l -L
- -I(大写i)是编译选项(预处理选项CFLAGS或者CPPFLAGS中指定),用来指定预处理时查找头文件的范围的。
- -l(小写L)是链接选项(LDFLAGS中指定),用来指定链接额外的库(譬如我们用到了数学函数,就用-lm,链接器就会去链接libm.so;那么我们使用了libjpeg,对应的库名字就叫libjpeg.so,就需要用-ljpeg选项去链接)
- -L是链接选项(LDFLAGS中指定),用来告诉链接器到哪个路径下面去找动态链接库。
总结:-I(大写i)指定预处理时查找头文件的范围,-l(小写L)是告诉链接器要链接的动态库的名字,而-L是告诉链接器库的路径
本文详细介绍了如何进行libjpeg库的移植,包括下载源码、配置、修改Makefile、编译和安装步骤。移植完成后,动态库.so文件存放在指定目录,头文件则位于对应的include目录。在部署时,动态库可放于系统库路径或自定义目录,并通过LD_LIBRARY_PATH环境变量指定。在编译工程时需使用-I和-L选项指定头文件和库路径。
1741

被折叠的 条评论
为什么被折叠?



