2013-01-15 2 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에 이루어졌다, 창은 다른 맹 글링 방식이있다.

, 당신은이 MathLink

그래서 다음을 사용

와 호환되는 형식으로 내보낼 수 일으키는 extern "C" 메커니즘의 기능을 래핑 기능은 C 호환 방식으로 수출되는 것을 보장하기 위해, 헤더 :

#ifdef __cplusplus 
extern "C" { 
#endif 

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

#ifdef __cplusplus 
} 
#endif 

만큼 당신이 #include 당신의 C++ 구현이 헤더, 그것은 제대로 연결해야합니다으로 MathLink

관련 문제