初学者正在努力解决八度和梅克斯问题

时间:2015-07-03 19:30:49

标签: c++ namespaces octave mex

我是一位经验丰富的C / C ++开发人员,但在处理八度音阶mex方面,我非常环保。我确定我错过了一些基本的东西,但我找不到它是什么。

这些是我的文件:

myhello.cpp   
test.cpp   
test.h

以下是文件的内容

(myhello.cpp):

#include "test.h"
#include "mex.h"

using namespace test;

void
mexFunction (int nlhs, mxArray *plhs[],
             int nrhs, const mxArray *prhs[])
{
  mexPrintf ("Hello, World!\n");
  testMethod();

  mexPrintf ("I have %d inputs and %d outputs\n", nrhs, nlhs);
}

(test.h)

namespace test
{
        void testMethod();
}

(TEST.CPP)

#include "test.h"
#include <iostream>

using namespace std;
using namespace test;

void testMethod()
{
        cout << "this works." << endl;
}

然后我通过./run-octave --no-gui启动Octave 4.0.0,并在提示符下输入以下内容:

  

mex -v myhello.cpp test.cpp

我得到的回应是:

  

g ++ -c -fPIC   -I / usr / local / include / octave-4.0.0 / octave / .. -I / usr / local / include / octave-4.0.0 / octave -I / usr / local / include -pthread -fopenmp -g - O2 -I。 myhello.cpp -o myhello.o g ++ -c -fPIC -I / usr / local / include / octave-4.0.0 / octave / .. -I / usr / local / include / octave-4.0.0 / octave -I / usr / local / include -pthread -fopenmp -g -O2 -I。 test.cpp -o test.o g ++ -shared -Wl,-Bsymbolic -o myhello.mex myhello.o test.o -L / usr / local / lib / octave / 4.0.0 -L / usr / local / lib - loctinterp -loctave

我再次收到了提示。

我输入

  

创建MyHello(1,2,3)

得到这个:

  

错误:/home/brush/Documents/mex_tests/myhello.mex:无法加载:   /home/brush/Documents/mex_tests/myhello.mex:未定义的符号:   _ZN4test10testMethodEv

所以显然有些东西没有正确连接,但我无法弄清楚如何让一切都这样做。对不起,但我已经搜索了一段时间,但没有找到任何解决这个简单问题的东西。

提前致谢, 本

P.S。我的系统是Ubuntu 15.04,64位。

1 个答案:

答案 0 :(得分:1)

除非我在void testMethod()中定义namespace test,否则我甚至无法在VS2013中编译(实际上是链接)。这有效:

//test.cpp
#include "test.h"
#include <iostream>

using namespace std;

namespace test
{
    void testMethod()
    {
            cout << "this works." << endl;
    }
}

没有namespace test{ ... },有未解析的符号:

  

myhello.obj:错误LNK2019:未解析的外部符号“void __cdecl test :: testMethod(void)”

当它工作时,我得到:

>> myhello
Hello, World!
I have 0 inputs and 0 outputs