Можно ли загрузить разделяемую библиотеку C ++ в Mathematica 8.0?

Я пытаюсь загрузить функцию C ++, скомпилированную в общую библиотеку из Mathematica 8.0. Мне удалось использовать функцию C с использованием MathLink, но MathLink, похоже, не поддерживает функции C ++. Поэтому я попытался создать общую библиотеку и загрузить ее через LibraryLink, но, похоже, LibraryFunctionLoad не может загрузить функцию C ++. Кому-нибудь удалось использовать функцию C ++ в Mathematica, и если да, то какие приемы нужно сделать, чтобы она работала?

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]