Glm VECTORIZE2_VEC重新定义了XCode警告
Glm VECTORIZE2_VEC redefined XCode warning
我只在XCode中收到关于glm中某些宏被重新定义的警告。这不是一个大问题,但我觉得警告很烦人。
如果我在罪魁祸首宏上放了一个#ifndef块,但整个系统都无法工作?我将它们包含在一个静态库中,该库链接到一个也包含它们的应用程序。我认为这可能是问题所在,所以我把它从其中一个中删除了,看看它是否有帮助。它没有。
在windows上使用mingw g++时不会出现此警告,但在Xcode 4中会出现。我使用的是glm 0.9.3.4版本。
警告:
"VECTORIZE2_VEC" redefined
This is the location of the previous definition
这种情况重复了数百次。
Culprit代码(取自glm文件_vectorize.hpp):
#define VECTORIZE2_VEC(func)
template <typename T>
GLM_FUNC_QUALIFIER detail::tvec2<T> func(
detail::tvec2<T> const & v)
{
return detail::tvec2<T>(
func(v.x),
func(v.y));
}
还有一些其他宏与此宏非常相似。
根据上面的评论,您似乎有3个选项:
-
只接受编译警告
-
更改VECTORIZE2_VEC宏定义相对于#include的位置,因为VECTORIze 2_VEC的另一个定义没有将其封装在#ifndef中(这会导致编译警告)
-
考虑到它已经定义好了,考虑一下是否真的需要再次#定义它。
选项1是可以的,但如果您有"无编译警告"的要求,这实际上是一件好事,那么您将不得不选择选项2(在我看来,这可能会变得很难维护)或3。
要实现选项2,您需要在最初定义的include之后定义宏,但在之前定义其他需要它的#include。如果您仅通过#包含一个文件来获得原始定义和编译错误,那么这可能是不可能的,在这种情况下,您将失去运气。
假设file1.h有原始的VECTORIZE2_VEC定义,而file2.h需要该定义,并且在没有该定义的情况下会导致编译错误,则以下方法可以解决该问题,并且不会出现错误和警告:
#include <file1.h>
#ifdef VECTORIZE2_VEC
#undef VECTORIZE2_VEC
#endif
#define VECTORIZE2_VEC(func) ....
#include <file2.h>
// ...
相关文章:
- Xcode 语义问题引用或以前定义的代码
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- Xcode"体系结构x86_64的未定义符号"
- XCode 警告"此处需要实例化变量'Singleton:<Foo>:_instance',但没有可用的定义
- C++ Xcode 未定义的架构符号
- XCode预编译标头中的C 语言的预处理器定义了什么?
- 当我在Xcode上访问矩阵(openCV垫子)的位置时,为什么我会得到未定义的行为(exc_bad_access(代码=
- 如何找到使用Xcode构建静态库时自我定义的名称空间
- Xcode 7.3.1中的C++链接错误和未定义引用
- 体系结构x86_64的未定义符号:Xcode 5 问题
- Xcode 4.5.2 libc++ std::bad_cast 实现自定义(字符串)流时
- Glm VECTORIZE2_VEC重新定义了XCode警告
- C++ XCode 中的错误:在定义运算符 * 时"no viable overloaded operator *=" *= 已经过测试并且正常运行
- XCode无法编译Poco项目,未定义符号
- 将目录添加到Xcode自定义项目模板会产生奇怪的递归
- 如何构建使用 OpenCV 的 XCode 6 iOS 应用程序 - 未定义错误__cplusplus
- 在 Xcode [c++] 中在断言 (assert.h) 中定义 lambda 时,为类似函数的宏调用提供过多参数会导
- 链接错误:Xcode 5 的体系结构x86_64未定义引用
- 如何通过 Xcode 在C++库中使用__IPHONE_4_0定义
- Xcode 错误:架构 x86_44 和 ld 的未定义符号:找不到架构x86_64的符号