我是一位经验丰富的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位。
答案 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