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