How to use MEX with PCL

9 Ansichten (letzte 30 Tage)
Itzik Ben Shabat
Itzik Ben Shabat am 11 Mai 2015
Bearbeitet: ZZ Hau am 5 Mär. 2017
Hi, so im new to mex but very familiar with matlab. im trying to use PCL with MEX but i keep getting a lot of errors that i dont know how to solve. it seems to have something to do with the line
#include <pcl/features/feature.h>
I tried everything i could find online but no luck. does anyone know how to solve this ? I am using win6 64bit and msvc 2010. I attached my codes nd error list below
Here is my matlab code :
if true
clear all
close all
clc
PCLRoot = 'C:\Program Files\PCL';
IPath1 = ['-I',PCLRoot,'\include\pcl-1.7'];
IPath2=['-I','C:\Program Files\Boost\include'];
IPath3=['-I','C:\Program Files\MATLAB\R2014b\extern\include\matrix.h'];
LPath1 = ['-L',fullfile(PCLRoot, 'lib')];
LPath2 = ['-L','C:\Program Files\Boost\lib\libboost_system-vc100-mt-1_50.lib'];
mex('NormalCalc.c', IPath1,IPath2,IPath3, LPath1,LPath2);
filename='rhino.pcd';
P = loadpcd(filename);
%pclviewer(P);
Normals=NormalCalc(P);
end
and here is my mex file (soing something really basic now - just transferring data from points to normals)
if true
% code
/*
* NormalCalc.c - calculates normals of point cloud
*
*
* points: a 3xN matrix (inMatrix)
* normals: outputs a 3xN matrix (outMatrix)
*
* The calling syntax is:
*
* outMatrix = arrayProduct(multiplier, inMatrix)
*
* This is a MEX-file for MATLAB.
*/
#include "mex.h"
#include <pcl/features/feature.h>
//typedef pcl::PointXYZRGBA PointT;
//typedef pcl::PointCloud<PointT> PointCloud;
/* The computational routine */
void NormalCalc(float *points, double *normals,int npoints){
mwSize i;
for (i=0; i<3*npoints; i++) {
normals[i]=(double) points[i];
mexPrintf("%f\n",points[i]);
}
}
/* The gateway function */
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
/* variable declarations here */
float *inMatrix; /* 3xN input matrix */
mwSize npoints; /* size of matrix */
double *outMatrix; /* output matrix */
/* code here */
/* check for proper number of arguments */
if(nrhs!=1) {
mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nrhs",
"one inputs required.");
}
if(nlhs!=1) {
mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nlhs",
"One output required.");
}
/* check that number of rows in points input argument is 3 */
if(mxGetM(prhs[0])!=3) {
mexErrMsgIdAndTxt("MyToolbox:arrayProduct:notRowVector",
"Input must be a 3 row vector.");
}
/* create a pointer to the real data in the input matrix */
inMatrix = mxGetPr(prhs[0]);
/* get dimensions of the input matrix = number of points */
npoints = mxGetN(prhs[0]);
/* create the output matrix */
plhs[0] = mxCreateDoubleMatrix(3,npoints,mxREAL);
/* get a pointer to the real data in the output matrix */
outMatrix = mxGetPr(plhs[0]);
/* call the computational routine */
NormalCalc(inMatrix, outMatrix,npoints);
}
end
here is the list of errors :
if true
Error using mex
NormalCalc.c
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(19) : error C2054: expected
'(' to follow 'using'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(19) : error C2061: syntax
error : identifier 'using'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(19) : error C2054: expected
'(' to follow 'using'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(21) : error C2061: syntax
error : identifier 'using'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(21) : error C2061: syntax
error : identifier 'abs'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(21) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(21) : error C2061: syntax
error : identifier 'atexit'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(21) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(22) : error C2061: syntax
error : identifier 'atof'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(22) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(22) : error C2061: syntax
error : identifier 'atoi'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(22) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(22) : error C2061: syntax
error : identifier 'atol'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(22) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(23) : error C2061: syntax
error : identifier 'bsearch'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(23) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(23) : error C2061: syntax
error : identifier 'calloc'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(23) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(23) : error C2061: syntax
error : identifier 'div'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(23) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(24) : error C2061: syntax
error : identifier 'exit'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(24) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(24) : error C2061: syntax
error : identifier 'free'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(24) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(24) : error C2061: syntax
error : identifier 'getenv'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(24) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(25) : error C2061: syntax
error : identifier 'labs'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(25) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(25) : error C2061: syntax
error : identifier 'ldiv'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(25) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(25) : error C2061: syntax
error : identifier 'malloc'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(25) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(26) : error C2061: syntax
error : identifier 'mblen'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(26) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(26) : error C2061: syntax
error : identifier 'mbstowcs'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(26) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(26) : error C2061: syntax
error : identifier 'mbtowc'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(26) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(27) : error C2061: syntax
error : identifier 'qsort'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(27) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(27) : error C2061: syntax
error : identifier 'rand'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(27) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(27) : error C2061: syntax
error : identifier 'realloc'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(27) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(28) : error C2061: syntax
error : identifier 'srand'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(28) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(28) : error C2061: syntax
error : identifier 'strtod'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(28) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(28) : error C2061: syntax
error : identifier 'strtol'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(28) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(29) : error C2061: syntax
error : identifier 'strtoul'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(29) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(29) : error C2061: syntax
error : identifier 'system'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(29) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(30) : error C2061: syntax
error : identifier 'wcstombs'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(30) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(30) : error C2061: syntax
error : identifier 'wctomb'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(30) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(32) : error C2054: expected
'(' to follow 'using'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(34) : error C2061: syntax
error : identifier 'using'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(34) : error C2061: syntax
error : identifier 'lldiv'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstdlib(34) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstddef(18) : error C2054: expected
'(' to follow 'using'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\cstddef(18) : error C2061: syntax
error : identifier 'using'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(78) : error C2143: syntax
error : missing '{' before '<'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(78) : error C2059: syntax
error : '<'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(87) : error C2143: syntax
error : missing '{' before '<'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(87) : error C2059: syntax
error : '<'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(98) : error C2061: syntax
error : identifier 'tr1'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(98) : error C2059: syntax
error : ';'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(98) : error C2449: found '{'
at file scope (missing function header?)
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(101) : error C2059: syntax
error : '}'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(125) : error C2143: syntax
error : missing '{' before ':'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(125) : error C2059: syntax
error : ':'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(132) : error C2143: syntax
error : missing '{' before '<'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(132) : error C2059: syntax
error : '<'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(141) : error C2143: syntax
error : missing '{' before '<'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xstddef(141) : error C2059: syntax
error : '<'
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\eh.h(26) : fatal error C1189: #error :
"eh.h is only for C++!"
end

Akzeptierte Antwort

Itzik Ben Shabat
Itzik Ben Shabat am 14 Mai 2015
so i solved it eventually. The main problem was that i used C++ in a C file. so first thing i did was to change the file to .cpp instead of .c. Then i got a lot of linker errors which regard different libs. so i inserted all of them manually.
This code finally worked:
if true
% Set the include paths
PCLRoot = 'C:\Program Files\PCL';
IPath1 = ['-I',PCLRoot,'\include\pcl-1.7'];
IPath2=['-I','C:\Program Files\Boost\include'];
IPath3=['-I','C:\Program Files']; %for eigen library
IPath4=['-I','C:\Program Files\flann\include'];
IPath5=['-I','C:\Program Files\VTK 5.8.0\include\vtk-5.8'];
IPath6=['-I','C:\Qt\4.8.0\include'];
IPath7=['-I','C:\Program Files\OpenNI\Include'];
% Set the library paths
LPath1 = ['-L','C:\Program Files\PCL\lib'];
LPath2 = ['-L','C:\Program Files\Boost\lib'];
LPath3 = ['-L','C:\Program Files\VTK 5.8.0\lib\vtk-5.8'];
LPath4 = ['-L','C:\Program Files\flann\lib'];
LPath5 = ['-L','C:\Qt\4.8.0\lib'];
LPath6 = ['-L','C:\Program Files\OpenNI\Lib64'];
lPath1 = ['-l','pcl_io_release.lib'];
lPath2 = ['-l','pcl_common_release.lib'];
lPath3 = ['-l','pcl_kdtree_release.lib'];
lPath4 = ['-l','pcl_search_release.lib'];
lPath5 = ['-l','pcl_features_release.lib'];
mex('YOUR FILE NAME.cpp',IPath1,IPath2,IPath3,IPath4,IPath5,IPath6,IPath7,LPath1,LPath2,LPath3,LPath4,LPath5,LPath6,lPath1,lPath2,lPath3,lPath4,lPath5);
  1 Kommentar
ZZ Hau
ZZ Hau am 5 Mär. 2017
Bearbeitet: ZZ Hau am 5 Mär. 2017
hi~ Do you try to use pcl KdTreeFLANN in matlab? Because I try to rewrite your example to run KdTreeFLANN,it has many problems.
if true
% code
KNNSearch.obj : error LNK2019: unresolved external symbol "private: void __cdecl pcl::KdTreeFLANN<struct
pcl::PointXYZ,struct flann::L2_Simple<float> >::cleanup(void)"
(?cleanup@?$KdTreeFLANN@UPointXYZ@pcl@@U?$L2_Simple@M@flann@@@pcl@@AEAAXXZ) referenced in function "public: virtual __cdecl
pcl::KdTreeFLANN<struct pcl::PointXYZ,struct flann::L2_Simple<float> >::~KdTreeFLANN<struct
pcl::PointXYZ,struct flann::L2_Simple<float> >(void)"
(??1?$KdTreeFLANN@UPointXYZ@pcl@@U?$L2_Simple@M@flann@@@pcl@@UEAA@XZ) referenced in function
KNNSearch.obj : error LNK2001: unresolved external symbol "public: virtual void __cdecl pcl::KdTreeFLANN<struct
pcl::PointXYZ,struct flann::L2_Simple<float> >::setInputCloud(class boost::shared_ptr<class
pcl::PointCloud<struct pcl::PointXYZ> const > const &,class boost::shared_ptr<class std::vector<int,class
std::allocator<int> > const > const &)"
(?setInputCloud@?$KdTreeFLANN@UPointXYZ@pcl@@U?$L2_Simple@M@flann@@@pcl@@UEAAXAEBV?$shared_ptr@$$CBV?$PointCloud@UPointXYZ@pcl@@@pcl@@@boost@@AEBV?$shared_ptr@$$CBV?$vector@HV?$allocator@H@std@@@std@@@4@@Z)
KNNSearch.obj : error LNK2001: unresolved external symbol "public: virtual int __cdecl pcl::KdTreeFLANN<struct
pcl::PointXYZ,struct flann::L2_Simple<float> >::nearestKSearch(struct pcl::PointXYZ const &,int,class
std::vector<int,class std::allocator<int> > &,class std::vector<float,class std::allocator<float> > &)const "
(?nearestKSearch@?$KdTreeFLANN@UPointXYZ@pcl@@U?$L2_Simple@M@flann@@@pcl@@UEBAHAEBUPointXYZ@2@HAEAV?$vector@HV?$allocator@H@std@@@std@@AEAV?$vector@MV?$allocator@M@std@@@5@@Z)
KNNSearch.obj : error LNK2001: unresolved external symbol "public: virtual int __cdecl pcl::KdTreeFLANN<struct
pcl::PointXYZ,struct flann::L2_Simple<float> >::radiusSearch(struct pcl::PointXYZ const &,double,class
std::vector<int,class std::allocator<int> > &,class std::vector<float,class std::allocator<float> > &,unsigned
int)const "
(?radiusSearch@?$KdTreeFLANN@UPointXYZ@pcl@@U?$L2_Simple@M@flann@@@pcl@@UEBAHAEBUPointXYZ@2@NAEAV?$vector@HV?$allocator@H@std@@@std@@AEAV?$vector@MV?$allocator@M@std@@@5@I@Z)
KNNSearch.mexw64 : fatal error LNK1120: 4 unresolved external symbol
end

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Gil Elbasos
Gil Elbasos am 4 Apr. 2016
It is kind of sad how you answered yourself. I am happy that it worked for you.
-G

Kategorien

Mehr zu Introduction to Installation and Licensing finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by