3

我目前正在为作业编写一个非常简单的游戏引擎,并且为了使代码更好,我决定使用向量数学库。我的一位讲师向我展示了用于子弹物理引擎的 Sony 矢量数学库,就我所见,它非常棒。我已经让它在 Linux 上运行得很好,但我在将它移植到 OS X(英特尔、雪豹)上时遇到了问题。我已将文件正确包含在我的项目中,但库的 C++ 版本似乎无法编译。我可以让 C 版本的库工作,但与 C++ 版本相比,它的 API 相当糟糕,使用这个库的全部原因是首先整理代码。

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

我已经用谷歌搜索了我的心,但我似乎找不到任何答案或任何东西可以为我指明正确的方向,所以任何帮助都会得到很大的帮助。

谢谢,

4

4 回答 4

1

__forceinline是一个保留字,只有几个编译器支持。显然,您的编译器不支持该__forceinline关键字,并且有问题的代码是不可移植的。

一个非常糟糕的解决方法是将新定义传递给您的编译器,以赋予关键字正确的含义。例如-D__forceinline=inline-D__forceinline=__attribute__((always_inline)) (谢谢保罗!)

于 2010-03-02T22:16:07.107 回答
1

假定 SSE 版本仅适用于 Microsoft Visual Studio。对于其他平台(Mac 等),您可以使用标量版本。

Bullet\Extras\vectormathlibrary\include\vectormath\scalar\cpp

于 2010-10-29T00:00:17.380 回答
1

看起来有人修复了这个问题并发布了一个补丁版本来回应这个问题。

现在符合 GCC 标准。

于 2011-02-20T00:48:40.383 回答
0

您在 OS X 上使用哪个编译器?标准 Xcode 3.2 安装中有 4 个可供选择,默认为 gcc 4.2。尝试 gcc 4.0 可能会更好。

于 2010-03-02T22:14:51.467 回答