c++ - 在 MATLAB 上使用 G++ 构建的问题
问题描述
我对 MATLAB 有点陌生,但目前正在尝试使用 G++(6.3 版)作为编译器来构建 MEX 文件。我收到了这个错误
MEX completed successfully.
Building with 'g++'.
Error using mex
/disks/local/sceneflow2/./external/libtrws/trwsMex.cpp:14:13: error: conflicting declaration ‘typedef
int mwSize’
In file included from /usr/local/MATLAB/R2016a/extern/include/matrix.h:25:0,
from /usr/local/MATLAB/R2016a/extern/include/mex.h:51,
from /disks/local/sceneflow2/./external/libtrws/trwsMex.cpp:9:
/usr/local/MATLAB/R2016a/extern/include/tmwtypes.h:795:19: error: ‘mwSize’ has a previous
declaration as ‘typedef size_t mwSize’
/disks/local/sceneflow2/./external/libtrws/trwsMex.cpp:15:13: error: conflicting declaration ‘typedef
int mwIndex’
In file included from /usr/local/MATLAB/R2016a/extern/include/matrix.h:25:0,
from /usr/local/MATLAB/R2016a/extern/include/mex.h:51,
from /disks/local/sceneflow2/./external/libtrws/trwsMex.cpp:9:
/usr/local/MATLAB/R2016a/extern/include/tmwtypes.h:796:19: error: ‘mwIndex’ has a previous
declaration as ‘typedef size_t mwIndex’
Error in make_mex (line 20)
mex ./external/libtrws/trwsMex.cpp -largeArrayDims CXXFLAGS="\$CXXFLAGS -std=c++0x -fpermissive"
-outdir build
我不明白。为什么/usr/local/MATLAB/R2016a/extern/include/tmwtypes.h
定义与mwSize
冲突/usr/local/MATLAB/R2016a/extern/include/mex.h
?它们不是包含在 MATLAB 中的预定义库(意味着它们应该可以正常工作吗?)
顺便说一句,/disks/local/sceneflow2/./external/libtrws/trwsMex.cpp
有一条线,其中包括上述mex.h
.
解决方案
错误消息必须阻塞(对于两个不同的错误),让我们只看第一个。我把它分成三个“行”:
/disks/local/sceneflow2/./external/libtrws/trwsMex.cpp:14:13: error: conflicting declaration ‘typedef int mwSize’ In file included from /usr/local/MATLAB/R2016a/extern/include/matrix.h:25:0, from /usr/local/MATLAB/R2016a/extern/include/mex.h:51, from /disks/local/sceneflow2/./external/libtrws/trwsMex.cpp:9: /usr/local/MATLAB/R2016a/extern/include/tmwtypes.h:795:19: error: ‘mwSize’ has a previous declaration as ‘typedef size_t mwSize’
第一行说编译器在文件mwSize
的第 14 行找到了一个声明trwsMex.cpp
,它说typedef int mwSize
.
最后一行说这mwSize
已经在tmwtypes.h
MATLAB 附带的头文件中定义了。
第二行说这个头文件被 包含matrix.h
,被 包含mex.h
,被你trwsMex.cpp
的第 9 行包含。
因此,要修复错误,请不要在您的 MEX 文件源代码中定义mwSize
,mwIndex
这些是由 MATLAB 的标头定义的。
推荐阅读
- java - 使用多模块 Maven 项目时 Eclipse 的类路径问题
- java - 将 JTable 中的数据导出为 PDF 格式
- google-apps-script - 我需要一个优雅的解决方案来格式化比赛时间
- c# - 如果与 Task.WhenAll() 一起使用,键入的 http 客户端会引发套接字异常
- batch-file - 从文本文件中提取部分句子
- ansible - 我可以在 ansible 中设置一个任务以仅在文件夹存在的情况下运行吗?
- cygwin - 关于 Cygwin Windows 编译问题的 Wine
- python - PyNGL/PyNio 的资源文件问题
- c++ - 密码生成器:如何让每个密码换行?
- c - 如何阅读最后一个字符为“n”的句子