Arm-linux交叉编译笔记

一:关于交叉编译器的安装
1、libz的交叉编译:

./configure –prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi –shared

修改makefile
CC=arm-linux-gcc
AR=arm-linux-ar rc
RANLIB=arm-linux-ranlib
CDSHARED=arm-linux-gcc -shared -wl, -soname,libz.so.1,–version-script,zl
lib.map

make

make install

2、libjpeg的交叉编译:

./configure –host=arm-linux –prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi –enable-shared –enable-static

make install

3、libpng的交叉编译

./configure –host=arm-linux –prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi –enable-shared –enable-static

make

make install

4、yasm的交叉编译:

./configure –host=arm-linux –prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi –enable-shared –enable-static

make

make install

5、libx264的交叉编译:

CC=arm-linux-gcc ./configure –enable-shared –host=arm-linux –disable-asm –prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi

make

make install

6、libxvid的交叉编译:

cd build/generic

./configure –prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi –host=arm-linux –disable-assembly

make

make install

7、ffmpeg的交叉编译:

./configure –prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi –enable-shared –disable-static –enable-gpl –enable-cross-compile –arch=arm –disable-stripping –target-os=linux –enable-libx264 –enable-libxvid –cc=arm-linux-gcc –enable-swscale

make

make install

8.cmake-gui安装
到官网上下载已经编译好的cmake-2.8.8-Linux-i386.tar,gz,解压就可以了。
说明:关于交叉编译器,友善提供完全编译好的,只需要解压到指定目录就可以了。
利用—C加绝对路径。
二:关于opencv的安装
1:安装到电脑
1:下载相应的包,解压到你执念想安装的目录下。
2:cd opencv (mkdir bulid) (cd bulid) 然后,网上有好多方法cmake…….一大串。看着很复杂。这里我实践的,只需要”cmake .”就可以了,这样默认的目录就是usr/local(安装目录)。
说明:这里,若果想要用到cmake的图形化界面,也可以apt-get install cmake-gui。然后cmake-gui就可以了,里面有安装源选择,安装目录选择,还有编译器选择。
3:然后make 说明:编译这个比较慢。可以用make-jx,x代表你的电脑的核。若果是8核,可以用make-j7.分为7个线程去编译它。这样比make快的多。
4:make install。完成。
说明:可以直接用,不用设置环境变量。应为默认的库是usr/loca,你的位置也在这。三:关于交叉编译opencv
1. #mkdir build

cd build

cmake-gui

选择源代码目录/home/6410/opencv/opencv-2.4.2/
选择Build目录:/home/6410/opencv/opencv-2.4.2/build
点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next,
Operating System填写arm-linux
C Compilers填写opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc
C++ Compilers填写opt/FriendlyARM/toolschain/4.5.1//bin/arm-linux-g++
程序库的Target Root填写opt/FriendlyARM/toolschain/4.5.1/
然后点击Finish。
默认安装目录为/usr/local,点击Generate生成Makefile。

make

2,在/usr/local/opencv-arm目录下$sudo make
(1),80%报错:
。。。。/home/xin/tiaozhansai/OpenCV-2.2.0/modules/ml/src/gbt.cpp:474: error: ‘expl’ was not declared in this scope
修改gbt.cpp中14行,16行:注释掉
//#if ANDROID
#define expl(x) exp(x)
//#endif
错误消除。

(2),83%报错:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libopencv_core.so: undefined reference to clock_gettime'
../../lib/libopencv_highgui.so: undefined reference to
_TIFFerrorHandler’
../../lib/libopencv_highgui.so: undefined reference to _TIFFrealloc'
../../lib/libopencv_core.so: undefined reference to
pthread_key_create
解决方法:修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,重新编译,错误消除

(3),83%报错:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libopencv_highgui.so: undefined reference to _TIFFerrorHandler'
../../lib/libopencv_highgui.so: undefined reference to
_TIFFrealloc’
../../lib/libopencv_highgui.so: undefined reference to _TIFFmalloc'
../../lib/libopencv_highgui.so: undefined reference to
_TIFFmemcpy’
../../lib/libopencv_highgui.so: undefined reference to TIFFOpen'
../../lib/libopencv_highgui.so: undefined reference to
_TIFFfree’
../../lib/libopencv_highgui.so: undefined reference to _TIFFwarningHandler'
../../lib/libopencv_highgui.so: undefined reference to
_TIFFmemcmp’
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemset’
解决方法:修改CMakeCache.txt,WITH_TIFF:BOOL=ON,改成OFF(不再对TIFF图像格式支持。这里我前面已经装过libtiff4-dev,但是编译报错,我不明白是为什么),重新编译,错误消除。

(4),96%报错:
CMakeFiles/opencv_test.dir/src/highguitest.obj: In function CV_HighGuiTest::run(int)':
highguitest.cpp:(.text._ZN14CV_HighGuiTest3runEi+0x18): warning: the use of
tmpnam’ is dangerous, better use mkstemp'
../../lib/libopencv_features2d.so: undefined reference to
cv::SIFT::SIFT(double, bool, bool, int, int, int, int)’
解决方法:在OpenCV2.2.0/modules/features2d/src/sift.cpp下
#ifdef arm
#define ARM_NO_SIFT
#endif
注释掉#define ARM_NO_SIFT.错误消除,
成功!

$sudo make install
3、测试
测试代码自己动手
遇到的问题:1.要用arm-linux-gxx去编译,xx:是c用gcc。c++
用g++。但是会有很多问题。
若出现头文件找不到:
方法一:用echo ‘main(){}’|arm-linux-gcc -E -v -默认搜索路径。把usr/local下的opencv复制到这个目录下。

方法二:自己写pkg文件,告诉编译器你的文件在哪儿。
我写的pkg:# package Information for pkg-config

prefix=/usr/local/opencv-arm
exec_prefix=prefixlibdir=prefixlibdir={prefix} libdir={exec_prefix}/lib
includedir_old=prefix/include/opencvincludedirnew=prefix/include/opencvincludedirnew={prefix}/include/opencv includedir_new={prefix}/include

Name:Opencv
Description:Open source Computer Vision Library
Version:2.3.1
Libs:-Llibdir−lopencvcore−lopencvimgpro−lopencvhighgui−lopencvml−lopencvvideo−lopencvfeatures2d−lopencvcalibd3−lopencvobjdetect−lopencvcontrib−lopencvlegacy−lopencvflannCflags:−Ilibdir−lopencvcore−lopencvimgpro−lopencvhighgui−lopencvml−lopencvvideo−lopencvfeatures2d−lopencvcalibd3−lopencvobjdetect−lopencvcontrib−lopencvlegacy−lopencvflannCflags:−I{libdir}-lopencv_core -lopencv_imgpro -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calibd3 -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann Cflags:-I{includedir_old} -I${includedir_new}
自己照例子

方法三:自己写makeflie,指定头文件路径。
还有会出现note: the mangling of ‘va_list’ has changed in GCC
方法一:g++ += -std=c++0x -USTRICT_ANSI
方法二:#arm-linux-g++ -Wno-psabi hello.c -o hello pkg-config --cflags --libs opencv (亲测有用)
还要加-lpthread –lrt,前面改了标识。后面编译要加。例如 arm-linux-g++ –o test pkg-config --cflags opencv-arm pkg-config –libs opencv-arm -Wno-psabi test.cpp -lpthread –lrt
如果没问题就是成功了。
若果出现
arm-linux-g++: –o: No such file or directory
arm-linux-g++: test: No such file or directory
arm-linux-g++: –lrt: No such file or directory
就是还有问题,要装一个sudo apt-get install ia32-libs
这个库。64为版本不支持。如果出现,没有这个源,那么对不起,我也卡这儿了。渍渍渍

4.移植
以后编译arm板的OpenCV代码时,要使用上面的编译指令。其中` 符号不是逗号,而是1 左边的那个符号。而把编译好的程序放到arm板时,在运行之,还要把/usr/local/arm-opencv/lib目录下的所有.so文件都拷贝到arm的/usr/lib或者/lib目录下。
头文件也要复制过去,在usr/local/opencv下面。
然后over

Arm-linux交叉编译笔记+opencv 编译相关推荐

  1. I.MX6ULL ARM Linux学习笔记

    I.MX6ULL ARM Linux学习笔记 写在前面 S1:U-Boot S2:正点原子U-Boot编译 S3:U-Boot基本命令第1讲:help.bdinfo和环境变量命令 S4:U-Boot基 ...

  2. Arm Linux 交叉编译(交叉编译是什么?CROSS_COMPILE)(交叉编译工具链【待更】)

    文章目录 交叉编译 1.编译 2.本地编译 3.交叉编译 交叉编译工具链 交叉编译 在嵌入式系统开发中,经常会听到一个词:交叉编译.到底什么是"交叉编译"呢?为什么要使用" ...

  3. linux top交叉编译_Linux 系统下ARM Linux交叉编译环境crosstool工具

    Linux系统下ARM Linux交叉编译环境的建立目前流行的有三种途径. 一.使用别人编译好的开发工具链本文引用地址:http://www.eepw.com.cn/article/201611/31 ...

  4. arm ubuntu 编译boost_为arm linux 交叉编译boost 1.33.1

    首先在arm linux环境上要有zlib 1 解开boost压缩包, cd进入解压目录 2 编译出bjam,并配置好,看手册页 3 产生Makefile: ./configure "-sB ...

  5. 【imx6ull-alientek-emmc】linux交叉编译环境 + 内核编译

    开发板:imx6ull-alientek-emmc,正点原子的min板子 困惑了好久,第一次搞通,记录一下,希望之后能知其所以然 目录 一.交叉编译环境 1.选择交叉编译器 2.解压 3.配置环境变量 ...

  6. Arm Linux交叉编译和连接过程分析(2)

    二.编译内核镜像过程 1.编译过程中涉及到到文件: /Makefile 编译产生顶层vmlinux镜像文件 /scripts/Kbuild.include make过程中到一些基本定义 /script ...

  7. Arm Linux交叉编译和连接过程分析(1)

    一.配置内核(Kconfig) 我们配置内核是实质是根据众多目录下面的Kconfig文件中组合成我们需要的一个最佳选择,即最终在根目录下面生成的.config文件,而这个文件会在根目录Makefile ...

  8. Linux学习笔记---初次编译Uboot系统

    在初次编译Uboot系统时,是按照正点原子开发指南操作的,但是开发指南上讲得不是很详细,又看了一遍视频教程才搞清楚完整步骤,为了方便学习,就将详细步骤记录下来,以便以后参考. Uboot初次编译 1. ...

  9. arm linux 交叉编译boost库

    测试编译  boost_1.48_0  编译时thread编译失败 测试编译  boost_1.60_0  编译时thread编译成功 编译步骤: 1.运行 ./bootstrap.sh  此时形成b ...

最新文章

  1. 微软亚洲研究院周明:从语言智能到代码智能
  2. 实时的.NET程序错误监控产品Exceptionless
  3. java导出模板 pdf设置字体_有哪些相见恨晚的PPT模板网站?
  4. 欧几里得空间——正交矩阵
  5. Django的静态文件路径设置对比
  6. 0909关于操作系统
  7. 临颖一高2021高考成绩查询,临颍一高举办2021年决战高考百日冲刺誓师大会
  8. PHP物业居民小区业主房产办公管理系统源码-支持多小区管理系统
  9. 阿里天池大赛实战记录之菜鸟-需求预测与分仓规划
  10. 深入理解Java虚拟机(1)——JDK源码分析
  11. 对抗网络学习-FGSM对抗样本生成
  12. 使用laypage分页
  13. SpringBoot入门之SpringBoot热部署,什么是热部署 04
  14. GitHub Actions入门教程:自动化部署静态博客
  15. 积分换元法中换元单调性问题的讨论
  16. 液晶电视英文linux使用教程,液晶电视如何使用 液晶电视正确使用方法介绍【详解】...
  17. 堆和栈是什么?有哪些区别?
  18. C语言删除链表的倒数第N个节点
  19. mysql error 1094,ERROR 1094 (HY000) at line 1: Unknown thread id
  20. unity全息技术入门打包至真机详解

热门文章

  1. php初始化函数赋值,PHP变量的初始化以及赋值方式介绍
  2. OPPO A37t怎么刷机 OPPO A37t的刷机教程 OPPO A37t完美解除账号锁
  3. 万物皆可联名时代,品牌联名怎么玩出彩?
  4. Google浏览器能否掘出另一块金山?
  5. 找不到libgvplugin_pango.so.6的问题
  6. 超全公园sketchup模型素材网站整理
  7. 喜用神最正确的算法_命理八字预测,得出来的结果是不是百分之百的正确?
  8. VC 类泡泡龙游戏算法
  9. windows出现蓝屏解决方法
  10. -g、-ggdb、-g3和-ggdb3之间的区别