我想用C++編寫一些使用SWIG與JAVA接口的庫。SWIG:使用導入的外部類型
我在另一個庫的一個C++函數中使用了一個庫中的一個C++結構作爲參數。
COMMON.H
namespace rina {
namespace cdap_rib {
typedef struct{
int size_;
void* message_;
} ser_obj_t;
}
}
該庫被包裹產生在JAVA稱爲eu.irati.librina.ser_obj_t
類。沒關係。然後,我有
utilities.h
class IPCPConfigEncoder {
public:
void encode (rina::cdap_rib::ser_obj_t& ser_obj);
}
其包梁與SWIG在Java類生產
public void encode(SWIGTYPE_p_rina__cdap_rib__ser_obj_t ser_obj) {
...
}
。展望我發現身邊(SWIG Importing generated class from a different module and package into the current class),我加入到.i
%typemap(javaimports) SWIGTYPE
%{
import eu.irati.librina.ser_obj_t;
%}
它生產
import eu.irati.librina.ser_obj_t;
public void encode(SWIGTYPE_p_rina__cdap_rib__ser_obj_t ser_obj) {
...
}
然後,我有幾個問題
的
import
被添加到所有的java類......我怎樣才能把它只包含到所需的類?如何告訴SWIG更改
SWIGTYPE_p_rina__cdap_rib__ser_obj_t
的eu.irati.librina.ser_obj_t
。
注:由於common.h
和utilities.h
在不同的圖書館,我不能把它們放在一起一樣痛飲模塊中。
請問我的例子
utilities.h
在:http://stackoverflow.com/a/30413268/168175爲你解決這個問題? – Flexo好,問題在於兩者都是放在不同文件夾中的不同模塊。當我導入其他.i時,它找不到包含,因爲它似乎都必須位於同一個文件夾中。 – Bernat
您可以使用-I標誌來SWIG設置包含搜索路徑。 – Flexo