0

誰かがこのライブラリをもう使用していますか?

昨年はうまくいきましたが、今はコードがコンパイルされていません:

(GCC 4.6.1 を使用する MinGW の場合):

In file included from ../include/glm/./core/func_packing.hpp:190:0,
                 from ../include/glm/glm.hpp:103,
                 from SmoothRenderer.cpp:11:
../include/glm/./core/func_packing.inl: In function 'glm::detail::uint32 glm::packUnorm4x8(const glm::detail::tvec4<float>&)':
../include/glm/./core/func_packing.inl:84:17: error: expected primary-expression before '(' token
../include/glm/./core/func_packing.inl:84:17: error: expected primary-expression before ')' token
../include/glm/./core/func_packing.inl:84:17: error: expected ';' before 'round'
../include/glm/./core/func_packing.inl:85:26: error: 'D' was not declared in this scope
../include/glm/./core/func_packing.inl: In function 'glm::detail::tvec4<float> glm::unpackUnorm4x8(const uint32&)':
../include/glm/./core/func_packing.inl:94:38: warning: statement has no effect [-Wunused-value]
../include/glm/./core/func_packing.inl:99:4: error: 'D' was not declared in this scope

これは最新バージョン 0.9.4.3 です。

最新のclangを使用したMacでの同様の問題:

In file included from SmoothRenderer.cpp:10:
In file included from ../include/glm/glm.hpp:103:
In file included from ../include/glm/./core/func_packing.hpp:190:
../include/glm/core/func_packing.inl:84:33: error: expected '(' for function-style cast or type construction
                detail::uint8 D((detail::uint8)round(clamp(v.w, 0.0f, 1.0f) * 255.0f));
                                 ~~~~~~~~~~~~~^
./util.h:330:15: note: expanded from macro 'D'
# define D(x) x
              ^
In file included from SmoothRenderer.cpp:10:
In file included from ../include/glm/glm.hpp:103:
In file included from ../include/glm/./core/func_packing.hpp:190:
../include/glm/core/func_packing.inl:85:26: error: use of undeclared identifier 'D'
                return detail::uint32((D << 24) | (C << 16) | (B << 8) | A);
                                       ^
../include/glm/core/func_packing.inl:99:4: error: use of undeclared identifier 'D'
                        D * 1.0f / 255.0f);
                        ^
../include/glm/core/func_packing.inl:94:30: warning: expression result unused [-Wunused-value]
                detail::uint32 D((p >> 24) & Mask8);
                ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~
./util.h:330:15: note: expanded from macro 'D'
# define D(x) x
              ^
In file included from SmoothRenderer.cpp:10:
In file included from ../include/glm/glm.hpp:108:
In file included from ../include/glm/./core/func_noise.hpp:85:
../include/glm/core/func_noise.inl:125:33: error: too many arguments provided to function-like macro invocation
                detail::tvec4<T> const D(0.0, 0.5, 1.0, 2.0);
                                              ^
../include/glm/core/func_noise.inl:125:27: error: expected ';' at end of declaration
                detail::tvec4<T> const D(0.0, 0.5, 1.0, 2.0);
                                        ^
                                        ;

これはヘッダーのみのライブラリです。こんな事があってはならない…

これは、4x4 行列の乗算と反転にのみ使用しています。私のアプリの残りの部分はLAPACKを広範囲に使用しているため、glmが必要とするものは何もありません。しかし、非常にポータブルにしようとしているコードがこのようにランダムに壊れるのは嫌いです。

4

1 に答える 1

2

Dええ、それはマクロの問題であることが判明しました。くそー、質問してから4分後に私の質問に答えます。それが問題を説明することの美しさです。半分の時間で十分です。

これは、プリプロセッサの使用を避けるもう 1 つの理由です。マッドエラー。名誉なことに、clang は、別の場所で定義されたマクロと何かが不自然に見えることに言及するだけでなく、それをそこにコピーして見せてくれるほど素晴らしいものでした。

于 2013-03-26T03:53:04.803 に答える