mex编译给出“没有...依赖于模板参数的参数”错误

时间:2012-09-29 21:40:05

标签: c++ matlab mex

我正在尝试使用Ubuntu下的MATLAB编译mex library。我发现以下错误甚至我尝试使用-fpermissive进行编译(即mex -v CXXFLAGS='$CFLAGS -fpermissive' Coarse2FineTwoFrames.cpp GaussianPyramid.cpp OpticalFlow.cpp,我该怎么办?库代码中是否有问题?

    In file included from Image.h:11:0,
                     from Coarse2FineTwoFrames.cpp:3:
    Stochastic.h:11:13: warning: extra tokens at end of #ifndef directive [enabled by default]
    In file included from OpticalFlow.h:4:0,
                     from Coarse2FineTwoFrames.cpp:4:
    NoiseModel.h:6:0: warning: "PI" redefined [enabled by default]
    Stochastic.h:16:0: note: this is the location of the previous definition
    In file included from Image.h:6:0,
                     from Coarse2FineTwoFrames.cpp:3:
    ImageProcessing.h: In static member function ‘static void ImageProcessing::BilinearInterpolate(const T1*, int, int, int, double, double, T2*)’:
    ImageProcessing.h:133:23: warning: there are no arguments to ‘__min’ that depend on a template parameter, so a declaration of ‘__min’ must be available [-fpermissive]
    ImageProcessing.h:134:23: warning: there are no arguments to ‘__min’ that depend on a template parameter, so a declaration of ‘__min’ must be available [-fpermissive]
    ImageProcessing.h: In static member function ‘static T1 ImageProcessing::BilinearInterpolate(const T1*, int, int, double, double)’:
    ImageProcessing.h:155:23: warning: there are no arguments to ‘__min’ that depend on a template parameter, so a declaration of ‘__min’ must be available [-fpermissive]
    ImageProcessing.h:156:23: warning: there are no arguments to ‘__min’ that depend on a template parameter, so a declaration of ‘__min’ must be available [-fpermissive]
    ImageProcessing.h: In static member function ‘static void ImageProcessing::BilinearInterpolate_transpose(const T1*, int, int, int, double, double, T2*)’:
    ImageProcessing.h:182:23: warning: there are no arguments to ‘__min’ that depend on a template parameter, so a declaration of ‘__min’ must be available [-fpermissive]
    ImageProcessing.h:183:23: warning: there are no arguments to ‘__min’ that depend on a template parameter, so a declaration of ‘__min’ must be available [-fpermissive]
    In file included from Image.h:11:0,
                     from Coarse2FineTwoFrames.cpp:3:
    Stochastic.h: In static member function ‘static void CStochastic::GaussianFiltering(T1*, T2*, int, int, int, double)’:
    Stochastic.h:402:32: warning: there are no arguments to ‘__min’ that depend on a template parameter, so a declaration of ‘__min’ must be available [-fpermissive]
    In file included from Coarse2FineTwoFrames.cpp:3:0:
    Image.h: In member function ‘virtual bool Image<T>::loadImage(std::ifstream&)’:
    Image.h:846:26: warning: there are no arguments to ‘strcmpi’ that depend on a template parameter, so a declaration of ‘strcmpi’ must be available [-fpermissive]
    Image.h:848:26: warning: there are no arguments to ‘strcmpi’ that depend on a template parameter, so a declaration of ‘strcmpi’ must be available [-fpermissive]
    Image.h:850:34: warning: there are no arguments to ‘strcmpi’ that depend on a template parameter, so a declaration of ‘strcmpi’ must be available [-fpermissive]
    Image.h: In member function ‘void Image<T>::imfilter_hv(Image<T1>&, const Image<double>&, const Image<double>&) const’:
    Image.h:1328:54: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:1329:54: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h: In member function ‘void Image<T>::imfilter_hv_transpose(Image<T1>&, const Image<double>&, const Image<double>&) const’:
    Image.h:1417:54: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:1418:54: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h: In member function ‘void Image<T>::warpImageBicubic(Image<T>&, const Image<T1>&, const Image<T1>&, const Image<T1>&, const Image<T2>&, const Image<T2>&) const’:
    Image.h:2277:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2278:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2279:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2280:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h: In member function ‘void Image<T>::warpImageBicubic(Image<T>&, const Image<T1>&, const Image<T2>&, const Image<T2>&) const’:
    Image.h:2339:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2340:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2341:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2342:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h: In member function ‘void Image<T>::warpImageBicubicCoeff(Image<T1>&) const’:
    Image.h:2439:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2440:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2441:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2442:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h: In member function ‘void Image<T>::warpImageBicubicRef(const Image<T>&, Image<T>&, const Image<T1>&, const Image<T1>&, const Image<T1>&, const Image<T2>&, const Image<T2>&) const’:
    Image.h:2536:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2537:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2538:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2539:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h: In member function ‘void Image<T>::warpImageBicubicRef(const Image<T>&, Image<T>&, const Image<T1>&, const Image<T2>&, const Image<T2>&) const’:
    Image.h:2606:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2607:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2608:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h:2609:25: warning: there are no arguments to ‘__max’ that depend on a template parameter, so a declaration of ‘__max’ must be available [-fpermissive]
    Image.h: In member function ‘bool Image<T>::loadImage(std::ifstream&) [with T = double, std::ifstream = std::basic_ifstream<char>]’:
    Coarse2FineTwoFrames.cpp:102:1:   instantiated from here
    Image.h:846:2: error: ‘strcmpi’ was not declared in this scope
    Image.h:848:2: error: ‘strcmpi’ was not declared in this scope
    Image.h:850:2: error: ‘strcmpi’ was not declared in this scope
    In file included from Image.h:6:0,
                     from Coarse2FineTwoFrames.cpp:3:
    ImageProcessing.h: In static member function ‘static void ImageProcessing::BilinearInterpolate(const T1*, int, int, int, double, double, T2*) [with T1 = double, T2 = double]’:
    ImageProcessing.h:218:4:   instantiated from ‘static void ImageProcessing::ResizeImage(const T1*, T2*, int, int, int, double) [with T1 = double, T2 = double]’
    Image.h:719:2:   instantiated from ‘bool Image<T>::imresize(double) [with T = double]’
    Coarse2FineTwoFrames.cpp:102:1:   instantiated from here
    ImageProcessing.h:133:2: error: ‘__min’ was not declared in this scope
    ImageProcessing.h:133:2: error: ‘__max’ was not declared in this scope
    In file included from Image.h:6:0,
                     from Coarse2FineTwoFrames.cpp:3:
    ImageProcessing.h: In static member function ‘static T ImageProcessing::EnforceRange(const T&, const int&) [with T = int]’:
    ImageProcessing.h:139:4:   instantiated from ‘static void ImageProcessing::BilinearInterpolate(const T1*, int, int, int, double, double, T2*) [with T1 = double, T2 = double]’
    ImageProcessing.h:218:4:   instantiated from ‘static void ImageProcessing::ResizeImage(const T1*, T2*, int, int, int, double) [with T1 = double, T2 = double]’
    Image.h:719:2:   instantiated from ‘bool Image<T>::imresize(double) [with T = double]’
    Coarse2FineTwoFrames.cpp:102:1:   instantiated from here
    ImageProcessing.h:23:98: error: ‘__max’ was not declared in this scope
    ImageProcessing.h:23:98: error: ‘__min’ was not declared in this scope

        mex: compile of ' "Coarse2FineTwoFrames.cpp"' failed.

3 个答案:

答案 0 :(得分:2)

看起来你正在尝试为matlab构建OpticalFlow包。我得到了同样的错误,并通过在project.h中设置编译标志_LINUX_MAC来解决它。 通过使用而不是“math.h”解决了另一个编译错误。

干杯,

埃坦

答案 1 :(得分:1)

根据您的错误消息。 strcmpi未定义。

通过非常快速的Google搜索,您可以看到它已在string.h中定义。

因此,请尝试在#include <string.h>的开头添加image.h

答案 2 :(得分:1)

对于abs错误我使用“#include&lt; cmath&gt;”在OpticalFlow.cpp中