2013-01-15 62 views
2

我想加載從Mathematica 8.0編譯到共享庫的C++函數。我設法使用MathLink使用C函數,但MathLink似乎不支持C++函數。所以我嘗試創建一個共享庫並通過LibraryLink加載它,但LibraryFunctionLoad似乎無法加載C++函數。有沒有人設法在Mathematica中使用C++函數,如果有的話,有什麼技巧可以讓它工作?是否可以將C++共享庫加載到Mathematica 8.0?

+1

你能包住C庫中的C++庫? – yiding

+0

你可以用'extern「C」'重新編譯C++嗎? – Shai

回答

2

問題在於C++代碼使用了正在導出的符號的變形。

這將編碼命名空間,類名,返回類型,名稱和參數作爲導出符號的一部分。這意味着,調用的函數:

int hello(int x, int y, int z) 

出口,就像這樣:

_Z5helloiii 

這是對於g ++做在Linux,Windows有不同的重整方案。

爲了確保功能在一個C兼容的方式導出,則包裹在extern "C"機構的功能,這會導致它的形式是與MathLink的

所以使用以下兼容導出在標題:

#ifdef __cplusplus 
extern "C" { 
#endif 

int hello(int x, int y, int z); 

#ifdef __cplusplus 
} 
#endif 

只要你#include這個頭在你的C++執行,應該正確地鏈接MathLink