注意问题:
1 路径问题
源文件路径 /home/litingting/openarm1/opencv-2.4.9
编译路径 (make make install) /home/litingting/openarm1/build
生成的四个文件夹安装路径cmake install prefix : /home/litingting/openarm1/aa/
cmake find root /home/litingting/arm-linux/opt/FriendlyARM/toolschain/4.4.3
arm-linux-gcc路径 /home/litingting/arm-linux/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc
arm-linux-g++路径 /home/litingting/arm-linux/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-g++
2 安装编译
解压OpenCV压缩文件,得到文件夹。
#cmake-gui 打开cmake的gui界面,开始进行配置,配置过程如下图所示:
1、选定解压后的源文件和将要编译的文件目录,这个自己之前先建好。
2、点击Configure 选择工程类型,选择交叉编译,点击下一步。
3、在下图的界面中选择交叉编译工具链以及库文件相关信息,按照图中的进行填写,其中红框部分为交叉编译工具链的实际路径,根据宿主机实际安装路径填写
4、点击Finsh完成初步配置。
5、此时主界面如下图所示,这时Cmake会读取程序的一些配置信息,可以再下图红框中对每一个编译选项进行修改,这里去掉WITH_TIFF支持并修改安装路径,其他配置可以根据需求选择。
make[2]: *** [bin/opencv_perf_core] 错误 1 make[1]: *** [modules/core/CMakeFiles/opencv_perf_core.dir/all] 错误 2 make: *** [all] 错误 2
关于TIFF的报错,是因为一开始我勾选了TIFF的支持,而这个支持是需要宿主机中安装相应的程序的,所以报错,可以打开cmake 去掉勾选。 其他报错经过查找找到以下解释:
编译时发现如下错误:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libcxcore.so: undefined reference to `clock_gettime'
../../lib/libcxcore.so: undefined reference to `pthread_key_create'
../../lib/libcxcore.so: undefined reference to `pthread_getspecific'
../../lib/libcxcore.so: undefined reference to `pthread_setspecific'原因是cmake不认识我定义的arm-linux系统标记,没有加上库pthread和rt的链接选项
此时需要修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt
按照此方法更改对应文件,如下图所示:
此处在CMakeCache.txt 的173行,添加-lpthread -lrt,然后继续编译。编译过程十来分钟左右,编译成功结果如下:
运行make install进行安装,在我的安装目录中就会多出以下几个文件夹:
lib文件夹即生成的库文件,拷贝到开发板对应目录即可。
3 错误问题和验证
A 在CMakeCache.txt 的173行,添加-lpthread -lrt 此时需要修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt -ldl 开始
B 关于TIFF的报错,是因 为一开始我勾选了TIFF的支持,而这个支持是需要宿主机中安装相应的程序的,所以报错,可以打开cmake 去掉勾选。 其他报错经过查找找到以下解释:修改CMakeCache.txt,WITH_TIFF:BOOL=ON,改成OFF,重新编译,错误消除。
C
出现错误:../../lib/libopencv_ocl.so: undefined reference to 'dlopen'
../../lib/libopencv_ocl.so: undefined reference to 'dlsym'
CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt -ldl 开始解决方法:在编译选项里添加 -ldl ,即Link dl library 。然后继续make,
You are supposed to either run
LDFLAGS=-ldl make
- that means run command make with LDFLAGS environment variable set to '-ldl' or run
make LDFLAGS+=-ldl
- that passes command to make to add to LDFLAGS -ldl. Both say to make it should tell linker to use libdl.so (to find dlopen and dlsym)
My solution: edit Makefile
find LDFLAGS
add LDFLAGS = -ldl
D
编译出现了警告:
/home/yr/ti-dvsdk_omapl138-evm_04_03_00_06/linux-devkit/bin/../lib/gcc/arm-arago-linux-gnueabi/4.3.3/../../../../arm-arago-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_core.so, needed by /usr/local/arm/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/home/yr/ti-dvsdk_omapl138-evm_04_03_00_06/linux-devkit/bin/../lib/gcc/arm-arago-linux-gnueabi/4.3.3/../../../../arm-arago-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_imgproc.so, needed by /usr/local/arm/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
这个问题是因为交叉编译器没有找到这两个库(网上是这么说的)。我将libopencv_core.so,libopencv_imgproc.so,这两个库拷贝到了
/home/yr/ti-dvsdk_omapl138-evm_04_03_00_06/linux-devkit/lib 中,即交叉编译器的lib中。
然后再运行编译命令。就ok了。没有任何错误和警告了
我的路径是
/home/litingting/arm-linux/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib
E
#include <opencv/cv.h>
#include <opencv/cxcore.h>
#include <opencv/highgui.h>
int main(int argc,char **argv)
{
CvCapture* capture = NULL;
IplImage* frame = NULL;
if(!(capture = cvCaptureFromCAM(-1)))
{
fprintf(stderr, "Can not open camera./n");
return -1;
}
cvNamedWindow("video", 1);
while(frame = cvQueryFrame( capture ) )
{
cvShowImage("video", frame);
}
cvDestroyWindow("video");
cvReleaseCapture(&capture);
return 0;
}
adb push /home/litingting/openarm1/aa/lib/libopencv_calib3d.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_contrib.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_core.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_features2d.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_flann.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_highgui.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_gpu.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_imgproc.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_legacy.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_ml.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_nonfree.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_objdetect.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_ocl.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_photo.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_stitching.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_superres.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_video.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_videostab.so /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_ts.a /system/bin
adb push /home/litingting/桌面/arm/open /system
(并确保文件open属性为可执行) chmod 777 open
/system/bin/sh: ./hello: not found 编译时候加上-static
makefile:8: *** 遗漏分隔符 。 停止。 解决办法:在这一行前面加tab
如果想打开文件即跳转
vim +n FileName
命令模式下
:$ 输入这个确定,就跳到最后一行了
:q! <回車>不保存退出。
:wq <回車>保存并退出。
:n 跳到第n行
/word 后回车,即查找word 查找功能
vim刚进入时候是命令模式 不能对文本写入 按i进入编辑 按ESC退回命令模式
结束