【发布时间】:2015-03-18 20:51:48
【问题描述】:
我想使用 SWIG for java 包装一个 c++ 类。我遵循了official tutorial 和documentation 并试图让它工作,但我得到了一些错误。 我使用的是 Windows 7 x64。
于是我打开cmd输入:swig -c++ -java myclass.i
该命令执行并生成了几个文件。(它没有产生错误)
之后,我输入:gcc -c myclass_wrap.cxx -I"C:\Program Files\Java\jdk1.7.0_60\include" -I"C:\Program Files\Java\jdk1.7.0_60\include\win32"
该命令也成功了。 (没有产生错误)
最后,我输入了ld -G myclass_wrap.o -o libmyclass.so
产生了一堆未定义的引用错误,例如:
myclass_wrap.o:myclass_wrap.cxx:<.text+0xa8>: undefined reference to '__cxa_allocate_exception'
这是我最初的 c++ 代码,以下 c++ 类: 头文件:
/*myclass.h*/
#define MYCLASS_H
#ifndef MYCLASS_H
#include <vector>
#include <iostream>
class myClass
{
private:
int ID;
std::vector<int> vector;
public:
myClass();
myClass(int id, std::vector<int> v);
void setID(int id);
int getID();
void setVector(std::vector<int> v);
std::vector<int> getVector();
void insertIntoVector(int num);
void printVector();
};
#endif // MYCLASS_H
和cpp文件:
/*myclass.cpp*/
#include "myclass.h"
myClass::myClass()
{
ID=0;
vector=std::vector<int>();
}
myClass::myClass(int id, std::vector<int> v)
{
ID=id;
vector=v;
}
void myClass::setID(int id)
{
ID=id;
}
int myClass::getID()
{
return ID;
}
void myClass::setVector(std::vector<int> v)
{
vector=v;
}
std::vector<int> myClass::getVector()
{
return vector;
}
void myClass::insertIntoVector(int num)
{
std::vector<int>::iterator it;
it=vector.end();
vector.insert(it,num);
}
void myClass::printVector()
{
std::vector<int>::iterator it;
for (it=vector.begin(); it<vector.end(); it++)
std::cout << ' ' << *it<< std::endl;
}
还有 swig 模块文件:
/*myclass.i*/
%module test
%{
#include "myclass.h"
%}
%include "std_vector.i"
namespace std {
%template(IntVector) vector<int>;
}
%include "myclass.h"
【问题讨论】: