مكتبة الرياضيات Simd Sony Vector في OS X مع C ++
-
23-09-2019 - |
سؤال
أقوم حاليًا بكتابة محرك لعبة بسيط للغاية لمهمة وجعل الكود أجمل كثيرًا ، لقد قررت استخدام مكتبة الرياضيات المتجهات. أظهر لي أحد محاضريي مكتبة الرياضيات Sony Vector التي يتم استخدامها في محرك فيزياء الرصاص وهي رائعة بقدر ما أستطيع رؤيتها. لقد جعلتها تعمل على Linux بشكل جيد ، لكنني أواجه مشاكل في نقلها على OS X (Intel ، Snow Leopard). لقد قمت بتضمين الملفات بشكل صحيح في مشروعي ولكن يبدو أن إصدار C ++ من المكتبة يجمع. يمكنني الحصول على إصدار C من المكتبة العاملة ولكن يحتوي على واجهة برمجة تطبيقات سيئة إلى حد ما مقارنة بإصدار 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
لقد غوغل قلبي ، لكن لا يمكنني العثور على أي إجابات أو أي شيء لأوجهني في الاتجاه الصحيح حتى يتم استلام أي مساعدة بشكل كبير.
شكرًا،
المحلول
ما هو المترجم الذي تستخدمه على OS X؟ هناك 4 للاختيار من بينها في تثبيت Xcode 3.2 القياسي والافتراضي هو GCC 4.2. قد تكون أفضل حالًا في تجربة GCC 4.0.
نصائح أخرى
__forceinline
هي كلمة محفوظة تدعمها فقط عدد كبير من المترجمين. من الواضح أن المترجم الخاص بك لا يدعم __forceinline
الكلمة الرئيسية والرمز المعني غير محمول.
أ فقير جدا سيكون الحل البديل هو تمرير تعريف جديد إلى المترجم الخاص بك والذي يعطي الكلمة الرئيسية المعنى الصحيح. على سبيل المثال: -D__forceinline=inline
أو -D__forceinline=__attribute__((always_inline))
(شكرا بول!)
كان من المفترض أن يكون إصدار SSE فقط لـ Microsoft Visual Studio. بالنسبة للمنصات الأخرى (MAC وما إلى ذلك) ، يمكنك استخدام الإصدار القياسي.
Bullet Extras vectormathlibrary include vectormath calcar cpp
يبدو أن شخصًا ما إصلاح هذا ونشره نسخة مصححة ردا على هذه القضية بالذات.
الآن GCC متوافق.