matlab采用mex编译多个cpp文件

最近在看matlab code时,由于本人使用的是64系统,而code中的mex文件时在32位系统上编译的,所以需要重新自己编译maxflowmex.cpp,但是直接mex maxflowmex.cpp时,出现以下错误:

maxflowmex.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl Graph<float,float,float>::Graph<float,float,float>(int,int,void (__cdecl*)(char *))" ([email protected]@@[email protected]@[email protected]),该符号在函数 mexFunction 中被引用

问题的原因是无法需要编译多个cpp文件所致。maxflowmex.cpp中包含头肩为#include "maxflow-v3.01/graph.h",所以从网上下载maxflow-v3.01放到相应目录下,如下图所示

观察maxflow-v3.01中有graph.cpp和maxflow.cpp,所以在命令行中输入mex maxflow-v3.01/maxflow.cpp maxflow-v3.01/graph.cpp maxflowmex.cpp即可。搞定!

时间: 2024-10-10 12:29:26

matlab采用mex编译多个cpp文件的相关文章

(原)matlab中使用mex编译多个cpp文件

以前一直是mex一个文件.刚才需要编译多个文件(如a.cpp调用b.cpp的函数,b.cpp调用c.cpp的函数).如果只是mex a.cpp,提示函数找不到函数. 突然想到mex c.cpp b.cpp a.cpp,最后只生成了c.mexw64. 然后想到如果反过来写的话mex a.cpp b.cpp c.cpp,成功的生成了a.mexw64. 以前没这样做过,所以不清楚.才知道可以这个样子.

使用matlab进行mex编译时的路径问题mexopts

matlab和vs 进行混合编程时总需要使用matlab编译mexFunction.cpp文件.这些文件免不了使用include下的*.h和lib下的*.lib文件.举例说明,这次我的cpp中用到了opencv/cv.h.在matlab\bin\win64\mexopts文件夹下有一个msvsopts100.bat的批处理文件. 用notepad 将这个文件打开在"include=" 和 "lib=" 后面添加需要使用的路径并加分号";" 设置好

# Clion中编译多个cpp(实现单文件编译)

Clion中编译多个cpp(实现单文件编译) 在不做任何配置情况下,Clion工程下只能有一个main()函数,新建多个cpp会导致报main()函数重复定义的错误,所以默认情况下无法在一个工程下编译多个cpp文件. 要想实现单文件编译,或者说编译过多个cpp文件,有两种解决方法: 手动配置CMakeLists.txt 安装插件(推荐) 手动配置CMakeLists.txt 像这样,为每个cpp文件制定唯一的编译器,编译运行的时候,选择相应的编译器即可. 更简单的方法是,第一次运行的时候使用快捷

c中头文件在cpp文件里引用和.h文件引用的思考

我们在编敲代码中头文件是常常使用的. 可是头文件是应该包括在.H文件里还是在.cpp文件里.在这个其中有什么样去差别呢. 假如说我们编写了一个a.cpp  .我们将a.cpp文件的变量和函数申明在a.h中. 在a.h文件有使用了b.中定义的类型type1数据m_type,相同b.cpp的头文件一些变量也声明在b.h中. 此时我们当然能够在a.cpp中包括b.h 也能够在a.h中.这样都是可行的.由于我们编译的时候会会将b.h包括进来. 而.h文件是不參与编译的.然后我们继续深入. 假如我们将b.

ubuntu系统下cmake 编译matlab中mex文件

cmake 编译工程具有独特的优势,特别对于复杂的工程更是如此.利用matlab直接编译mex文件时,对于文件数据多的工程时,需要列举所有文件,并且要按照依赖关系排序,这些都是直接采用matalb编译mex的缺点. 下面通过一个简单的加法函数例子,说明如何利用cmake编译生成mex文件.如何对系统动态库进行设置,使matlab能够正常调用mex函数. 首先说明如何生成mex文件. 本例首先利用add.h.add.cpp文件编译生成add.so动态文件库,然后利用mian.cpp文件调用add.

Matlab中利用mex编译Opencv实现画板绘图功能

图形绘制是标记和可视化数据的重要方法. 通过在Matlab中集成画板绘图功能, 可为科学计算提供便利. 1 设置Matlab支持Opencv编译 操作系统: 麒麟14.04(基于Ubuntu 14.04) 命令: mex -v -> mexopts.sh sourced from directory (DIR = $MATLAB/bin) FILE = /usr/local/MATLAB/R2013a/bin/mexopts.sh --------------------------------

如何在安卓环境下自动编译所有cpp文件

正常情况下,需要在Android.mk文件下面一个一个手动添加cpp文件,如果文件较多,这样就太麻烦了. 解决办法如下: 把Android.mk文件里面的这段代码: LOCAL_SRC_FILES := hellocpp/main.cpp ../../Classes/AppDelegate.cpp 改为: FILE_LIST := hellocpp/main.cpp FILE_LIST += $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp) LOCAL_

使用CL命令编译cpp文件

缘起,我的vs 2003无法新建工程,又不喜欢用vs 2013那样的重量级开发工具(就写两行代码,测试测试一些基本的语法规则或算法). 想来vs应该可以像GCC或G++那样直接用命令行编译Cpp文件,那样就省得我那么麻烦了. 我的步骤是这样的: 1. 打开Visual Studio .NET 2003 命令提示 进入cmd界面 2. cd  D:\proj2003\pureCode切换到cpp所在目录 D:\proj2003\pureCode>cl calcsize.cpp 3. 这样就会在当前

g++编译cpp文件

gdb调试c程序打不到断点的原因可能是编译c文件的时候没有加-g选项,-g选项是编译加debug信息的,不加是打不到断点的 g++编译cpp文件 g++ -g -c *.cpp       编译 g++ -g -o exec *.o   链接 或 g++ *.cpp -o exec g++编译生成.a 静态库文件,.so为动态库 gcc *.cpp -lcp-demangle -o exec 选项 -l (ell) 通过添加前缀 lib 和后缀 .a 将跟随它的名字变换为库的名字 libcp-d