在最大流/最小割算法中链接 mex 文件时出错

发布于 2024-11-04 07:21:04 字数 902 浏览 5 评论 0原文

我正在尝试在 MATLAB 中实现“基于 GrabCut 的对象分割技术”方法。为了最小化马尔可夫随机场能量函数,我使用此处提供的标准最大流/最小割算法:http://vision.csd.uwo.ca/code/

问题:当我尝试创建一个 mex 文件来调用 MATLAB 中的图形创建和最小化函数时,出现以下错误:

未定义的符号: “Graph::Graph(int, int, void ()(char))”,引用自: _GraphTest.o 中的mexFunction

ld:未找到符号 collect2:ld返回1退出状态

mex:“GraphTest.mexmaci64”的链接失败。

我的代码非常非常简单,只需复制自述文件中提到的部分代码,如下所示:

#include "mex.h"
#include <stdio.h>
#include <math.h>
#include "graph.h"

void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[]) 
{    
    typedef Graph<int, int, int> GraphType;
  GraphType *g = new GraphType(/*estimated # of nodes*/ 2, /*estimated # of edges*/1); 
}

如果以前使用过此包或经历过类似错误的任何人都可以提供有关该问题的一些见解,我将不胜感激。

提前致谢!

I am trying to implement "Object Segmentation technique based on GrabCut" approach in MATLAB. For minimizing the Markov Random Fields Energy Function, I am using the standard Max-flow/min-cut algorithm as provided here: http://vision.csd.uwo.ca/code/

Question: When I try to create a mex file to call the functions of Graph creation and minimization in MATLAB, I get the following error:

Undefined symbols:
"Graph::Graph(int, int, void ()(char))", referenced from:
_mexFunction in GraphTest.o

ld: symbol(s) not found
collect2: ld returned 1 exit status

mex: link of ' "GraphTest.mexmaci64"' failed.

My code is really really simple, and just copied a part of the code mentioned in the README file as follows:

#include "mex.h"
#include <stdio.h>
#include <math.h>
#include "graph.h"

void mexFunction(int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[]) 
{    
    typedef Graph<int, int, int> GraphType;
  GraphType *g = new GraphType(/*estimated # of nodes*/ 2, /*estimated # of edges*/1); 
}

I would really appreciate if anyone who has used this package before or experienced similar sort of an error, could provide some insights into the problem.

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鲸落 2024-11-11 07:21:04

我猜你是用Matlab编译的?

尝试:

mex GraphTest.cpp graph.cpp

我假设您的 mex 网关文件是 GraphTest.cpp。您可以将任何依赖项标记到末尾。这对于简单的项目来说效果相当好。当它变得更大时,您将需要切换到具有依赖项的实际构建系统。我更喜欢 CMake。

I presume you're compiling with Matlab?

Try:

mex GraphTest.cpp graph.cpp

I presume your mex gateway file is GraphTest.cpp. Any dependencies you can just tag onto the end. This works reasonably well for simple projects. When it gets larger, you'll want to switch to an actual build system w/ dependency. I prefer CMake.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文