问题
项目需求,交叉编译opencv,并移植到arm中。
在opencv2.0以上的版本编译都要借助于cmake工具生成Makefile
2.0一下版本才是使用configure生成Makefile
请确保宿主机已经安装cmake和cmake-gui工具,如果请自行安装
sudo apt-get install cmake cmake-qt-gui cmake-curses-gui
开发环境
开宿主机:Fedora9.0
交叉编译器:友善之臂arm-linux-gcc4.4.3
自动化编译工具: cmake version 2.8.12.2
编译
下载opencv源代码
项目官网:http://opencv.org/
下载地址:http://opencv.org/downloads.html
源码我放置在自己目录的/opencv/opev3.0.0-src 下
期望的构建目录在/opencv/opencv3-build 下
期望的安装目录是/opt/arm/opencv/opencv3-arm
cmake配置生成makefile
运行cmake的图形化工具cmake-gui
sudo cmake-gui
选择源代码目录/opencv/opev3.0.0-src
选择Build目录/opencv/opencv3-build,大家根据自己设置配置编译目录
点击Configure或者Generator
选择Unix Makefiles,
接着选择Specify options for cross-compiling,
点击Next,接着开始配置交叉编译环境的信息
Operating System填写arm-inux
C Compilers填写您交叉编译器arm-linux-gcc命令的地址
C++ Compilers填写arm-linux-g++的地址
程序库的Target Root填写交叉编译器的bin目录,
然后点击Finish,您的配置信息就出来的
注意默认的安装路径为 修改默认配置,默认安装目录为/usr/local
但是我们交叉编译的来说并不合适,这样会替换我们宿主机上原有的库,
所以我把CMAKE_INSTALL_PREFIX变量改为/opt/arm/opencv/opencv3-arm
好了最后点击Configure进行配置,然后点击Gennerate就会生成Makefile
make编译并且安装
sudo make
sudo make install
出现问题
我们刚才的配置其实肯定是有问题的,因为一堆依赖库没有配置链接参数,但是我们又不知道需要哪些库,所以我们只能等待出现问题进行解决。
pthread
报错
Linking CXX executable ../../bin/opencv_test_calib3d
../../lib/libopencv_core.so: undefined reference to `pthread_key_create'
../../lib/libopencv_core.so: undefined reference to `pthread_getspecific'
../../lib/libopencv_ts.so: undefined reference to `pthread_key_delete'
../../lib/libopencv_core.so: undefined reference to `pthread_once'
../../lib/libopencv_core.so: undefined reference to `clock_gettime'
../../lib/libopencv_core.so: undefined reference to `pthread_setspecific'
很明显是pthread的库,
解决
修改/opt/opencv3-build目录下的CMakeCache.txt
CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt
dlfcn
问题
undefined reference to `dlerror'
undefined reference to `dlopen'
解决
CMAKE_EXE_LINKER_FLAGS继续加上-ldl
parallel_pthreads_set_threads_num
问题
undefined reference to `dlerror'
undefined reference to `dlopen'
Linking CXX executable ../../bin/opencv_perf_core
../../lib/libopencv_core.so: undefined reference to `parallel_pthreads_set_threads_num(int)'
../../lib/libopencv_core.so: undefined reference to `parallel_pthreads_get_threads_num()'
../../lib/libopencv_core.so: undefined reference to `parallel_for_pthreads(cv::Range const&, cv::ParallelLoopBody const&, double)'
解决
这个是编译工具链的问题,解决了快一天
后来重要找到了解决方案Fixed compilation of pthread-based parallel_for with gcc 4.4.3
修改modules/core/src/parallel.cpp,自132行开始添加7处删除5处(+表示要添加,-表示要删除)
namespace cv
{
ParallelLoopBody::~ParallelLoopBody() {}
+#if defined HAVE_PTHREADS && HAVE_PTHREADS
+ void parallel_for_pthreads(const cv::Range& range, const cv::ParallelLoopBody& body, double nstripes);
+ size_t parallel_pthreads_get_threads_num();
+ void parallel_pthreads_set_threads_num(int num);
+#endif
}
+
namespace
{
#ifdef CV_PARALLEL_FRAMEWORK
@@ -301,7 +307,7 @@ void cv::parallel_for_(const cv::Range& range, const cv::ParallelLoopBody& body,
}
#elif defined HAVE_PTHREADS
- void parallel_for_pthreads(const Range& range, const ParallelLoopBody& body, double nstripes);
+
parallel_for_pthreads(range, body, nstripes);
#else
@@ -361,8 +367,6 @@ int cv::getNumThreads(void)
#elif defined HAVE_PTHREADS
- size_t parallel_pthreads_get_threads_num();
-
return parallel_pthreads_get_threads_num();
#else
@@ -424,8 +428,6 @@ void cv::setNumThreads( int threads )
#elif defined HAVE_PTHREADS
- void parallel_pthreads_set_threads_num(int num);
-
parallel_pthreads_set_threads_num(threads);
#endif
上一篇:s3c2410上搭建QT/Embedded4.8.5开发环境(六)--QtCreate的配置
下一篇:mount nfs常见出错信息总结
推荐阅读最新更新时间:2024-11-01 10:10
设计资源 培训 开发板 精华推荐
- AKD4563A,AK4563A 16 位、4 通道 A/D 和 2 通道 D/A 转换器评估板
- OP462GSZ单电源直接接入调制解调器的典型应用电路
- LT1121IN8-3.3 5V 低压差稳压器的典型应用电路,用于具有关断的电池供电电源
- 基于PCA9685的16路舵机驱动板1.0
- LIS344ALH适配器板,标准DIL24插座
- LT3434 的典型应用 - 具有 100 uA 静态电流的高压 3A、200kHz 降压型开关稳压器
- LT3663HMS8E-3.3、3.3V 降压转换器的典型应用
- 用于白光 LED 驱动器的 TB62737FPG 升压型 DC-DC 转换器的典型应用
- 【桂电校赛】任意波形发生器
- -5V、-3.3V DC 至 DC 单路输出电源
- MPS有奖活动|绿色AI“芯” 动力,探索节能低碳的AI供电方案!
- 直播已结束【使用 TI 低成本 MSPM0 MCU 快速开发 – 生态详解系列之二】(9:45开始入场)
- 有奖下载:邂逅大师——福禄克全新专家级红外热像仪
- 独家拆解 | 语音控制在真无线立体声TWS耳机上的创新应用
- 为何矢量网络分析仪喊话:多端口测试,是时候放弃开关矩阵了
- ST有奖直播:智能功率开关在工业自动化行业的应用
- 智慧六月 潜伏在EEWORLD里的一休哥
- 有奖直播:安世半导体先进 SiC MOSFET 助力提升 EV-Charger 和 OBC 应用能效
- TI工业月技术方案深度学习
- TI 工业月,灵感不设限!深度挖掘工业设计的痛点和难点,读专题填问卷赢好礼!