2

Mathematica 8.0から共有ライブラリにコンパイルされたC++関数をロードしようとしています. MathLink を使用して C 関数を使用することはできましたが、MathLink は C++ 関数をサポートしていないようです。そこで共有ライブラリを作成してLibraryLinkで読み込もうとしたのですが、LibraryFunctionLoadでC++の関数を読み込めないようです。Mathematica 内で C++ 関数を使用できた人はいますか?

4

1 に答える 1

2

問題は、C++コードがエクスポートされるシンボルのマングリングを使用していることです。

これは、名前空間、クラス名、戻りタイプ、名前、およびパラメーターを、エクスポートされたシンボルの一部としてエンコードします。これは、次の関数が呼び出されることを意味します。

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

次のようなものとしてエクスポートします。

_Z5helloiii

これはLinuxのg++で行われ、Windowsには異なるマングリングスキームがあります。

関数がC互換の方法でエクスポートされるようにするには、関数をextern "C"メカニズムでラップします。これにより、MathLinkと互換性のある形式で関数がエクスポートされます。

したがって、ヘッダーで次を使用します。

#ifdef __cplusplus
extern "C" {
#endif

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

#ifdef __cplusplus
}
#endif

#include実装でこのヘッダーを使用している限り、次のヘッダーC++と正しくリンクする必要があります。MathLink

于 2013-01-15T10:33:43.670 に答える