2010-03-02 4 views
3

저는 현재 벡터 수학 라이브러리를 사용하기로 결정한 과제를 위해 매우 간단한 게임 엔진을 작성하고 코드를 더 멋지게 만듭니다. 저의 강사 중 한 명이 Bullet Physics 엔진에 사용되는 Sony Vector Math 라이브러리를 보여 주었고, 지금까지 볼 수있는 한 훌륭했습니다. Linux에서 잘 작동하고 있지만 OS X (Intel, Snow Leopard)에서 작동하도록 이식하는 데 문제가 있습니다. 내 프로젝트에 파일을 올바르게 포함 시켰지만 C++ 버전의 라이브러리가 컴파일되지 않는 것 같습니다. 라이브러리의 C 버전을 사용할 수는 있지만 C++ 버전과 비교하면 상당히 불쾌한 API가 있으며이 라이브러리를 사용하는 이유는 처음부터 코드를 수정하기 위해서였습니다.SIMD 소니 벡터 수학 라이브러리 (C++ 포함)

http://glosx.blogspot.com/2008/07/sony-vector-math-library.html

내가 뭔가를 제안 할 것으로 보인다 우연히 발견 한이 블로그 게시물은 컴파일러의 몫이다? 그것은 매우 짧아서 나는 그것으로부터 많은 정보를 취할 수 없었습니다.

나는 C++ 버전을 사용하려고하면 나는 다음과 같은 오류 (각 오류의 확대도) 수 :

/usr/include/vectormath/cpp/../SSE/cpp/vectormath_aos.h:156:0 
/usr/include/vectormath/cpp/../SSE/cpp/vectormath_aos.h:156: 
error: '__forceinline' does not name a type 

초 오류 :의 끝에

/Developer/apps/gl test/main.cpp:7:0 In file included from /Developer/apps/gl test/main.cpp 

/usr/include/vectormath/cpp/vectormath_aos.h:38:0 In file included from 
/usr/include/vectormath/cpp/vectormath_aos.h 

/usr/include/vectormath/cpp/../SSE/cpp/vectormath_aos.h:330:0 In file included from 
/usr/include/vectormath/cpp/../SSE/cpp/vectormath_aos.h 

/usr/include/vectormath/cpp/../SSE/cpp/vecidx_aos.h:45:0 Expected constructor, destructor, 
or type conversion before '(' token in  /usr/include/vectormath/cpp/../SSE/cpp/vecidx_aos.h 

마지막으로 두 가지 오류를 main.cpp 파일 :

Expected '}' at the end of input 
Expected '}' at the end of input 

나는 내 마음을 봤지만 아무 대답도 찾지 못했습니다. 올바른 방향으로 나를 가리 키기 위해 어떤 도움이라도 크게 받게 될 것입니다.

감사합니다,

답변

0

OS X에서 어떤 컴파일러를 사용하고 있습니까? 표준 Xcode 3.2 설치에서 선택할 수있는 4 가지가 있으며 기본값은 gcc 4.2입니다. gcc 4.0을 사용하는 것이 좋습니다.

+0

gcc4.2가 현재 Xcode에서 기본값으로 설정되어 있습니다. 나는 gcc4.0을 시험해 보았고 Xcode는 416 개의 오류를 주었다. 다른 컴파일러는 gcc 4.2와 동일한 오류를 발생시킵니다. –

+1

왜 이것을 Xcode로 구축하고 있습니까? 커맨드 라인에서'./configure && make && sudo make install'을하는 것이 일반적인 것이 아닌가? –

+0

아, 그게 다야! 라이브러리를 제대로 구축하지 못했고, make install을하고 스칼라 라이브러리를 사용 했으므로 이제는 완벽하게 작동합니다. 신입 회원들에게 도움을 주신 데 대해 감사 드리며 신인의 실수로 인해 유감스럽게 생각합니다. –

1

__forceinline은 몇 개의 컴파일러 만 지원하는 예약어입니다. 분명히 컴파일러는 __forceinline 키워드를 지원하지 않으며 문제의 코드는 이식 가능하지 않습니다.

매우 좋음 해결 방법은 키워드에 올바른 의미를 부여하는 새 정의를 컴파일러에 전달하는 것입니다. 예. : -D__forceinline=inline 또는 -D__forceinline=__attribute__((always_inline)) (감사합니다 Paul!)

+0

gcc의 경우 더 나은 정의는'-D__forceinline = __ attribute __ ((always_inline))' –

+0

이 것이 C++ 코드에서 수행되었거나 다른 곳에서 수행되어야합니까? OS X에서 설치/사용할 수있는 다른 컴파일러가 있습니까? –

+0

@ 존 : 이것은 프로젝트 설정이나 메이크 파일에서 수행됩니다. '-D' 스위치는 컴파일러의 명령 행 매개 변수입니다. – greyfade

1

SSE 버전은 Microsoft Visual Studio 전용으로 간주되었습니다. 다른 플랫폼 (Mac 등)의 경우 스칼라 버전을 사용할 수 있습니다.

총알 \ 기타 \ vectormathlibrary \ 포함 \ vectormath \ 스칼라 \의 CPP

1

그것은 사람의이을 고정 바로이 문제에 대한 응답으로 a patched version을 게시 것 같습니다.

이제 GCC를 준수합니다.

+0

링크 해 주셔서 감사합니다. 향후 사용자에게 큰 도움이 될 것입니다. –

관련 문제