您的位置:首页 > 其它

tld 算法移植到arm开发板(6410) (一)

2012-02-17 09:59 351 查看
环境:ubuntu10.04 + s3c6410

交叉编译工具链:光盘自带的arm-linux-4.4.1

opencv动态库已经交叉编译好(上一篇),复制到开发板 /lib/下

1,vim打开src/下的CMakeLists.txt,增加:

set(CMAKE_SYSTEM_NAME linux)

set(CMAKE_C_COMPILER "/usr/local/arm/4.4.1/bin/arm-linux-gcc")

set(CMAKE_CXX_COMPILER "/usr/local/arm/4.4.1/bin/arm-linux-g++")

设置c,c++使用的编译器。

编译源码,报错:

/usr/local/opencv-arm/lib/libopencv_core.so: undefined reference to `pthread_key_create'
/usr/local/opencv-arm/lib/libopencv_core.so: undefined reference to `pthread_getspecific'
/usr/local/opencv-arm/lib/libopencv_core.so: undefined reference to `clock_gettime'
/usr/local/opencv-arm/lib/libopencv_core.so: undefined reference to `pthread_setspecific'


为解决这个问题,在CMakeLists.txt增加:

set(CMAKE_EXE_LINKER_FLAGS "-lpthread -lrt")

这样,就可以在make的时候添加编译选项,链接相应的动态库。

然后按着README中的:

mkdir build

cd build

cmake ../src/

make

cd ../bin/

再次编译成功,得到执行文件run_tld.

2,通过U盘拷贝到ok6410上,运行./run_tld,报错:

./run_tld: /lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./run_tld)
./run_tld: /lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /lib/libopencv_features2d.)
./run_tld: /lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /lib/libopencv_contrib.so)


这是由于libstdc++.so版本低。

我复制 主机上/usr/lib目录下的libstdc++.so到ok6410的 /lib目录下

再次运行,上面的问题得以解决。

同时有新的报错:

./run_tld: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

再查阅其他的资料,我发现我拷贝的libstdc++.so不对,应该是嵌入式对应的和 pc对应的不是一样的。

从交叉编译包目录下 /usr/local/arm/4.4.1/arm-none-linux-gnueabi/libc/usr/lib/libstdc++.so.6.0.12 拷贝到 板子的/lib下

重新建立软链接 ln -s libstdc++.so.6.0.12 libstdc++.so.6 。

问题解决,可以运行了。

算法运行后但是没有打开 摄像头设备,算法打印出“capture device failed to open! ”

明天再来解决这个问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: