Arm-linux交叉编译笔记+opencv 编译
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'
_TIFFerrorHandler’
../../lib/libopencv_highgui.so: undefined reference to
../../lib/libopencv_highgui.so: undefined reference to _TIFFrealloc'
pthread_key_create
../../lib/libopencv_core.so: undefined reference to
解决方法:修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,重新编译,错误消除
(3),83%报错:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libopencv_highgui.so: undefined reference to _TIFFerrorHandler'
_TIFFrealloc’
../../lib/libopencv_highgui.so: undefined reference to
../../lib/libopencv_highgui.so: undefined reference to _TIFFmalloc'
_TIFFmemcpy’
../../lib/libopencv_highgui.so: undefined reference to
../../lib/libopencv_highgui.so: undefined reference to TIFFOpen'
_TIFFfree’
../../lib/libopencv_highgui.so: undefined reference to
../../lib/libopencv_highgui.so: undefined reference to _TIFFwarningHandler'
_TIFFmemcmp’
../../lib/libopencv_highgui.so: undefined reference to
../../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)':
tmpnam’ is dangerous, better use
highguitest.cpp:(.text._ZN14CV_HighGuiTest3runEi+0x18): warning: the use ofmkstemp'
cv::SIFT::SIFT(double, bool, bool, int, int, int, int)’
../../lib/libopencv_features2d.so: undefined reference to
解决方法:在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 编译相关推荐
- I.MX6ULL ARM Linux学习笔记
I.MX6ULL ARM Linux学习笔记 写在前面 S1:U-Boot S2:正点原子U-Boot编译 S3:U-Boot基本命令第1讲:help.bdinfo和环境变量命令 S4:U-Boot基 ...
- Arm Linux 交叉编译(交叉编译是什么?CROSS_COMPILE)(交叉编译工具链【待更】)
文章目录 交叉编译 1.编译 2.本地编译 3.交叉编译 交叉编译工具链 交叉编译 在嵌入式系统开发中,经常会听到一个词:交叉编译.到底什么是"交叉编译"呢?为什么要使用" ...
- linux top交叉编译_Linux 系统下ARM Linux交叉编译环境crosstool工具
Linux系统下ARM Linux交叉编译环境的建立目前流行的有三种途径. 一.使用别人编译好的开发工具链本文引用地址:http://www.eepw.com.cn/article/201611/31 ...
- arm ubuntu 编译boost_为arm linux 交叉编译boost 1.33.1
首先在arm linux环境上要有zlib 1 解开boost压缩包, cd进入解压目录 2 编译出bjam,并配置好,看手册页 3 产生Makefile: ./configure "-sB ...
- 【imx6ull-alientek-emmc】linux交叉编译环境 + 内核编译
开发板:imx6ull-alientek-emmc,正点原子的min板子 困惑了好久,第一次搞通,记录一下,希望之后能知其所以然 目录 一.交叉编译环境 1.选择交叉编译器 2.解压 3.配置环境变量 ...
- Arm Linux交叉编译和连接过程分析(2)
二.编译内核镜像过程 1.编译过程中涉及到到文件: /Makefile 编译产生顶层vmlinux镜像文件 /scripts/Kbuild.include make过程中到一些基本定义 /script ...
- Arm Linux交叉编译和连接过程分析(1)
一.配置内核(Kconfig) 我们配置内核是实质是根据众多目录下面的Kconfig文件中组合成我们需要的一个最佳选择,即最终在根目录下面生成的.config文件,而这个文件会在根目录Makefile ...
- Linux学习笔记---初次编译Uboot系统
在初次编译Uboot系统时,是按照正点原子开发指南操作的,但是开发指南上讲得不是很详细,又看了一遍视频教程才搞清楚完整步骤,为了方便学习,就将详细步骤记录下来,以便以后参考. Uboot初次编译 1. ...
- arm linux 交叉编译boost库
测试编译 boost_1.48_0 编译时thread编译失败 测试编译 boost_1.60_0 编译时thread编译成功 编译步骤: 1.运行 ./bootstrap.sh 此时形成b ...
最新文章
- 微软亚洲研究院周明:从语言智能到代码智能
- 实时的.NET程序错误监控产品Exceptionless
- java导出模板 pdf设置字体_有哪些相见恨晚的PPT模板网站?
- 欧几里得空间——正交矩阵
- Django的静态文件路径设置对比
- 0909关于操作系统
- 临颖一高2021高考成绩查询,临颍一高举办2021年决战高考百日冲刺誓师大会
- PHP物业居民小区业主房产办公管理系统源码-支持多小区管理系统
- 阿里天池大赛实战记录之菜鸟-需求预测与分仓规划
- 深入理解Java虚拟机(1)——JDK源码分析
- 对抗网络学习-FGSM对抗样本生成
- 使用laypage分页
- SpringBoot入门之SpringBoot热部署,什么是热部署 04
- GitHub Actions入门教程:自动化部署静态博客
- 积分换元法中换元单调性问题的讨论
- 液晶电视英文linux使用教程,液晶电视如何使用 液晶电视正确使用方法介绍【详解】...
- 堆和栈是什么?有哪些区别?
- C语言删除链表的倒数第N个节点
- mysql error 1094,ERROR 1094 (HY000) at line 1: Unknown thread id
- unity全息技术入门打包至真机详解