环境:Macbook Air M2 Sequoia、Xcode 16.2、VulkanSDK 1.3、glfw 3.4、glm 1.0.1
错误描述:由于标头引用错误而导致构建失败。 main.cpp 包含一个头文件 glfw.h,其中包含另一个头文件 vulkan.h,其中包含另一个头文件 vulkan_core.h,后者使用
uint32_t
来定义别名。即使 uint32_t
已包含在 glfw.h 中,也无法识别 stdint.h
。设置 Xcode 后从 vulkan-tutorials 运行测试代码时会发生这种情况。
错误:未知类型名称“uint32_t”
错误位置:vulkan_core.h
代码:
main.cpp(复制自vulkan-tutorials#setting up Xcode)
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
GLFW/glfw3.h
#include <stdint.h>
#if defined(GLFW_INCLUDE_VULKAN)
#include <vulkan/vulkan.h>
#endif /* Vulkan header */
vulkan/vulkan.h
#include "vulkan_core.h"
vulkan_core.h
...
typedef uint32_t VkBool32;
typedef uint64_t VkDeviceAddress;
typedef uint64_t VkDeviceSize;
typedef uint32_t VkFlags;
typedef uint32_t VkSampleMask;
...
我已按照 vulkan-tutorial#setting-up-Xcode 上的说明进行操作。唯一的区别是我使用
/opt/homebrew/Cellar
而不是 /usr/local/include
和 /usr/local/lib
在构建设置的 search path 选项卡中设置 header/lib 搜索路径,并且我已将链接设置为递归。 glfw 和 glm 都安装在/opt/homebrew/Cellar
下。
我已经检查了 stdint.h。它已正确安装到
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdint.h
,并且我已确保它在其他项目中运行良好。
我还尝试将标头
我是 Xcode 新手,所以可能有一些我不知道的事情。
有什么建议吗?非常感谢。
解决方案:将标头搜索路径从
/opt/homebrew/Cellar
更改为glfw/include
和glm/include
的具体路径。 /opt/homebrew/Cellar
包含太多的库和安装,在递归搜索标头时可能会混合Xcode。
正确的标头搜索路径应该如下所示:
/opt/homebrew/Cellar/glfw/3.4/include
/opt/homebrew/Cellar/glm/1.0.1/include
vulkansdk/macOS/include
# vulkansdk is the specific path to VulkanSDK.
将搜索方法从非递归设置为递归,然后构建应该成功。