如何用ICC编译OpenCV?

时间:2009-08-13 12:54:20

标签: linux opencv intel icc

我正在尝试使用icc在Linux上编译OpenCV,以便用intel工具分析执行情况。

我使用默认选项安装了最新版本的icc。我尝试了“用户”(icc安装在我的家中)和“sudo”(icc安装在/ opt中)安装。 icc的版本是11.1 20090630

我还想过来源iccvars.sh,为PATH和LD_LIBRARY_PATH添加所需的路径

我还尝试了几个版本的OpenCV:   - 主要的一个:pre1.1。 configure根本不识别icc   - 'latest_tested_snapshot'和'trunk'版本:icc被configure很好地识别(--enable-openmp产生-openmp选项,而不是-fopenmp)

当我制作时,一切似乎都可以,直到编译的中间。然后是关于'操作员'的许多警告(可能是一百个)。这是一个例子:

../include/opencv/cxcore.hpp(335): warning #597: "cv::Size_<_Tp>::operator cv::Size_<float>() const [with
_Tp=float]" will not be called for implicit or explicit conversions
      operator Size_<float>() const;
      ^
          detected during instantiation of class "cv::Size_<_Tp> [with _Tp=float]" at line 394

最后错误:

/bin/bash ../../../libtool --tag=CXX   --mode=compile icpc -DHAVE_CONFIG_H -I. -I../../..  -I../../../include/opencv -I. -DCV_NO_BACKWARD_COMPATIBILITY  -fPIC -I/usr/include/python2.6  -g -O2 -MT _highgui_la-pyhelpers.lo -MD -MP -MF .deps/_highgui_la-pyhelpers.Tpo -c -o _highgui_la-pyhelpers.lo `test -f 'pyhelpers.cpp' || echo './'`pyhelpers.cpp
_ml.cpp(36134): error: argument of type "uchar={unsigned char} *" is incompatible with parameter of type "int *"
        result = (int)(arg1)->get_ord_var_data(arg2,arg3,arg4,arg5,(float const **)arg6,(uchar const **)arg7); 
                                                              ^

_ml.cpp(36134): error: argument of type "const uchar={unsigned char} **" is incompatible with parameter of type "const int **"
        result = (int)(arg1)->get_ord_var_data(arg2,arg3,arg4,arg5,(float const **)arg6,(uchar const **)arg7); 
                                                                                        ^

compilation aborted for _ml.cpp (code 2)
make[4]: *** [_ml_la-_ml.lo] Erreur 1

我有人成功用icc编译OpenCV,请告诉我!

2 个答案:

答案 0 :(得分:1)

好的,我终于用ICC编译了OpenCV。 OpenCV与英特尔很接近,因为英特尔高度参与了这个项目。从版本1.1开始,OpenCV本身就支持icc编译器。当你在configure中指定CC = icc时,随着-fopenmp(gcc样式)转换为-openmp(icc样式),会有一些细微的变化。然而,在OpenCV 1.1(这是最新的稳定版)和现在的发布之间,icc已经发展。我认为它曾用于以前版本的icc编译。

它与svn上最新的测试版本一起使用: https://opencvlibrary.svn.sourceforge.net/svnroot/opencvlibrary/tags/latest_tested_snapshot/opencv/

随着svn的发展,它可能会发生变化,但此时(8月27日)它会起作用。警告仍在这里(不要害怕,有很多)。这是我的配置bash行:

./configure --prefix=/home/user/opencv/icc CC=icc CXX=icpc --enable-openmp --disable-apps --disable-optimization --disable-sse

我禁用了优化和sse指令,因为它与icc产生了一些冲突。

答案 1 :(得分:0)

使用与用于创建该库的ICC不同的版本可能会导致您的问题。您必须向图书馆提供商询问使用哪个版本。