2012-06-04 2 views
1

최신 Matlab MEX 파일을 컴파일하기 위해 gcc 3.4 vs 4.4를 사용했을 때의 트레이드 오프/관심사는 무엇입니까?GCC 3.4 대 C++ 기반 MEX 파일의 4.4?

Fedora v16에서 MATLAB (R2012a)과 함께 사용하기 위해 일부 기성품 C++ 코드 (kdtree)를 MEX 파일로 컴파일해야합니다. 클러스터 문제인 최신 GCC 컴파일러 (4.6.x)를 사용하여 심볼 문제가 발생했습니다. 그리고 시스템 관리자는 Matlab에 의해 gcc 4.4.x, officially supported 컴파일러를 만드는 데 매우 저항합니다. (왜 그런지는 모르겠다.) 대신 그는 레거시 (2006 년경) gcc 3.4.6 컴파일러를 사용하여 제안했다. 그래서 내 질문에 어떤 트레이드 오프 또는 문제가있는 경우 이전 gcc 컴파일러를 사용하여 무엇입니까? 공연? 64 비트 지원? 스레드 안전 (또는 실제로 여러 병렬 호출)? 기타?

답변

2

당신은 대부분 C++ 11 기능 (표준화 된 스레드, 가변 템플릿 등 http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport 포함)의 예비 구현을 놓치고 있습니다. 두 컴파일러가 모두 ABI와 MATLAB/Octave 호환 바이너리를 생성하기 만하면 실제로 버전 관련 안전 문제는 없습니다. C 컴파일러는 공유 상태 문제를 해결할 수 없습니다. 성능은 약간 다르지만 중요하지는 않습니다. 어느 컴파일러 버전이라도 나는 어쨌든 당신의 코드를보다 최적화 된 방식으로 구현할 수 있다고 확신합니다. gcc 3.4는 64 비트를 지원합니다.

+0

C++ 0x 기능이란 무엇입니까? 당신은 mex 준비된 코드의보다 최적의 구현을 가르쳐 주시겠습니까? –

+0

C++ 0x 기능은 작년에 새로 업데이트 된 C++ 11 표준의 일부가 된 특정 기능입니다. GCC 4.4가 발행되었을 때, C++ 11은 여전히 ​​미래에 배치되었지만 C++ 11은 형태를 취하고 있으며 컴파일러는 이미 그 중 일부를 구현했습니다. 그것은 2006 년, 2007 년, 2008 년, 2009 년, 또는 ....에서 완료 될 것이라고 생각했기 때문에 C++ 0x의 호기심이 강한 이름에 의해 호출되었습니다.이 경우 2011 년에 완료되었습니다. 한마디로, C++ 0x는 G ++ 4.4가 제공하는 C++ 11의 예비 구현을 나타냅니다. – thb

+0

(해당되는 경우 답변자가 내 대답을 내 대답에 추가하는 것을 고려하겠습니까?이 의견은 독자적으로 답을 얻지는 못하지만 독자가 느끼는 추가 정보를 제공합니다). – thb