树莓派的杂七杂八

来源:互联网 发布:网络预约挂号平台 编辑:程序博客网 时间:2024/05/16 03:39

一、交叉编译jpeg-9a(生成的库为libjpeg.so)

先从官网下载交叉编译器,直接解压到本地,将bin目录加入到系统变量中后,进入目录执行

./configure CC=arm-none-linux-gnueabi-gcc --enable-shared --host=arm-none-linux-gnueabi

如果不想加入到系统路径里,则增加--prefix=/home/john/jpeg_arm,即会生成新的文件夹jpeg_arm,所有库都在里面

make

make install

另外ImageMagick设置一样


二、交叉编译mysql connector(生成的库为libmysqlclient.so)

安装cmake

sudo apt-get install cmake

设置编译器 

终端输入export CC=arm-linux-gcc CXX=arm-linux-g++

用cmake产生makefile

mkdir mypath

cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=mypath  (mypath为交叉编译之后的安装路径)

开始编译

make

make install


可能在make过程中在编译到95%的时候会报未定义到floor(),log(),pow()等数学函数,因为gcc编译时候要加-lm参数连接math.h


解决方法:


vim CMakeLists.txt ////在如下两处添加-lm参数


SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -lm")


SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -lm -fno-rtti -fno-exceptions")


如果在开始编译时include/my_global.h 中的rint()这个函数报错可以将其函数体全部注释也能编译通过


三、交叉编译ffmpeg

./configure --enable-shared --disable-yasm --enable-cross-compile --arch=arm --target-os=linux --cross-prefix=arm-none-linux-gnueabi-


补充:

mysql connector
x86 64
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=mypath

raspberry pi
export CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=mypath

都要修改:
IF(CMAKE_COMPILER_IS_GNUCXX)
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall -lm")
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall -lm -fno-rtti -fno-exceptions")
  SET(CMAKE_CXX_COMPILER "${CMAKE_C_COMPILER}" CACHE INTERNAL "C++ Compiler" FORCE)
ENDIF(CMAKE_COMPILER_IS_GNUCXX)



ImageMagick
x86 64
./configure --enable-shared --prefix=/home/john/test/ImageMagick-6.9.1-2/mypath CFLAGS="-fPIC"

raspberry pi
./configure  CC=arm-linux-gnueabihf-gcc --enable-shared --prefix=/home/john/test/ImageMagick-6.9.1-2/mypath CFLAGS="-fPIC" --host=arm-linux-gnueabihf


ffmpeg
x86 64
./configure --enable-shared  --disable-yasm --prefix=/home/john/test/ffmpeg-2.6.2/mypath --extra-cflags=-fPIC

raspberry pi
./configure --enable-shared --disable-yasm --enable-cross-compile --arch=arm --target-os=linux --cross-prefix=arm-linux-gnueabihf- --prefix=/home/john/test/ffmpeg-2.6.2/mypath  --extra-cflags=-fPIC



jpeg-9a
x86 64
./configure --enable-shared --prefix=/home/john/test/jpeg-9a/mypath CFLAGS="-fPIC"

raspberry pi
./configure  CC=arm-linux-gnueabihf-gcc --enable-shared --prefix=/home/john/test/jpeg-9a/mypath CFLAGS="-fPIC" --host=arm-linux-gnueabihf


说明:

1、因为树莓派提供的交叉编译器中不包含acl内容,所以前期考虑自己下载源码编译,但比较繁琐,acl还依赖attr,所以最后直接在树莓派中网络安装acl,然后将acl.h、libacl.so和libattr.so文件拷贝出来,放入项目中即可,注意的是,需要将acl相关的头文件和动态库路径在Makefile中指明,否则编译器会使用x86平台的头文件,产生错误;

2、另外,树莓派提供的交叉编译器读取动态库的路径也有讲究,我是采用软链接的方式将自己的库放在gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf/目录下,放在其它的lib目录下好像找不到;头文件也一样,放入gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/libc/usr/include/下,注意的是,acl头文件默认读取<sys/acl.h>,而该目录在交叉编译器目录中不存在,所以新建gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/libc/usr/include/sys目录即可;

3、我是使用得64位下的编译器,所有依赖的第三方库也需要按照上述方法一个个编译,经常使用ldd和file命令查看生成的文件是否正确。

0 0
原创粉丝点击