我设法为Java设置swig。 除了使用std :: string。
的函数之外,它工作正常我的.hpp文件包含:
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
namespace AcornClient {
int createConnection(); // Returns connection id
int freeConnection( int ); // Connection
int open( int, // Connection
std::string, // Site
std::string, // Project
std::string, // Dataset
std::string, // Path
bool, // Recurse
bool ); // Regex
int close( int ); // Server context
}
界面是这样的:
%module AcornClientAPI
%include "std_string.i"
%include cpointer.i
typedef std::string String;
%{
#include "../cpp/AcornClientAPI.hpp"
#include <libxml/tree.h>
%}
%include typemaps.i
namespace AcornClient {
int createConnection(); // Returns connection id
int freeConnection( int ); // Connection
int open( int, // Connection
std::string, // Site
std::string, // Project
std::string, // Dataset
std::string, // Path
bool, // Recurse
bool ); // Regex
int close( int ); // Server context
}
当我运行createConnection和freeConnection函数时,代码会正确编译和运行。
当我尝试在这样的Java中使用功能时:
int blah = AcornClientAPI.open(id, "blah1", "blah2", "blah3", "blah4", true, false);
我收到此错误
java: symbol lookup error: libBlah.so: undefined symbol: _ZN11AcornClient4openEiSsSsSsSsbb
字符串应该有问题。它没有识别它们。