linux编译的时候带上库,linux上移植别的库来编译方法

  • Post author:
  • Post category:linux


注意:linux编译库的时候,注意不要放在linux和windows共享目录下。

///———————————————-///

注明:

编译的时候如何处理:

-I+头文件的路径

连接的时候如何处理:

-L+库文件的路径-l库的名字-static

//————————————————///

下面举两种移植jpeg库到linux下编译的方法:

方法一:

用户自己指定库的目录。

首先:

下载、解压后就可以配置库的路径了。

配置方法:

运行一个配置脚本(configure),并向配置脚本传递配置参数:

–prefix—>安装库的路径

–host=arm-linux —>库工作的平台

–enable-shared —>生成动态共享库(*.so)

–enable-static —>生成静态库(*.a)

该脚本是在你解压的库的源码下就有configure的,

即运行:

./configure –prefix=/home/gec/libjpeg/libjpeg –host=arm-linux –enable-shared –enable-static

前面的–host=arm-linux表示该编译后的代码是在arm平台上运行的,

–enable-shared表示动态库

–enable-static表示静态库

–prefix=/home/gec/libjpeg/libjpeg是表示将jpeg的库文件和库的头文件(也就是该库的所有文件)编译后放到/home/gec/libjpeg/libjpeg的目录下,若无此目录那么就创建目录,若存在就不创建,直接加在对应的库文件、头文件里面。而不是将他们编译进交叉工具链里,所以在要编译的程序的Makefile中应该要加上/home/gec/libjpeg/libjpeg/include和-L/home/gec/libjpeg/libjpeg/lib

即:

CFLAGS = -Wall -g -c -I/home/gec/libjpeg/libjpeg/include

LDFLAGS = -L/home/gec/libjpeg/libjpeg/lib -ljpeg

a4c26d1e5885305701be709a3d33442f.png
程序的Makefile文件的修改

方法二:

将编译后的库文件和库头文件放到交叉工具链下,这样的话就可以在使用工具链时自动将库文件、头文件连接过去。

从而可知编译进交叉工具链只需将其路径改为自己当前交叉工具链的路径即可,即:

#./configure –prefix=/usr/local/arm/4.5.1/arm-none-linux-gnueabi/libc/usr  –host=arm-linux CC=arm-linux-gcc —

enable-shared –enable-static

若编译进了交叉工具链那么就可将Makefile的库文件和库头文件的路径删去,而不必像法一那样要在所编译的应用程序上加上库路径。

所以可以:

CFLAGS = -Wall -g -c

LDFLAGS = -ljpeg

即可。

a4c26d1e5885305701be709a3d33442f.png
方法二程序的Makefile

最后,配置好了后执行make

再make install

就完成了,第二种方法弄的话直接在交叉工具链下对应的/usr/local/arm/4.5.1/arm-none-linux-gnueabi/libc/lib下可看到对应的动态库(后缀为.so)和静态库(后缀为.a)的jpeg库了以及在/usr/local/arm/4.5.1/arm-none-linux-gnueabi/libc/usr/include下可看到编译进来的jpeg头文件。

a4c26d1e5885305701be709a3d33442f.png
jpeg动态静态库的目录

a4c26d1e5885305701be709a3d33442f.png
jpeg库的头文件

而第一种方法的话需要到前面–prefix=/home/gec/libjpeg/libjpeg的路径下查看(路径可以自己改为自己想要的)。

注意法一和法二的区别。。。。。。

​PS:限于作者的水平,对于文档中存在的不严谨甚至错误,希望各位能够予以指教,本人联系邮箱860038779@qq.com。