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