错误:符号'xxx'是多重定义的

时间:2015-08-11 23:30:32

标签: ios linker metal

我在代码中添加了多个Metal着色器,现在我得到了:

[::-1]

我没有在任何地方包含Error: symbol '<shader name>' is multiply defined Command /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/usr/bin/metallib failed with exit code 1 个文件(XCode负责编译本身),我无法将.metalinline添加到函数中,所以出了什么问题?

3 个答案:

答案 0 :(得分:3)

显然,如果着色器功能与另一个文件中的另一个完全相同的签名,则它被视为重复。我更改了用于输出的结构的名称并将其链接。

答案 1 :(得分:0)

对我来说,当我重命名金属文件时会发生这种情况。由于某种原因,有一些工件挂起,我开始看到构建上的重复符号错误。不确定这是一个bug还是什么,但我能解决的唯一方法是重命名该功能。

答案 2 :(得分:0)

在头文件中定义函数也存在问题。我以为我可以内联它们,但似乎我只能声明它们。

例如,我有这个头文件,

// ShaderMath.h
#pragma once
using namespace metal;
float4 conjugate(const float4 q);

float4 conjugate(const float4 q) {
  return float4( -q.xyz, q.w );
}

如果我将此标题包含在多个金属文件中,我会得到&#34;乘法定义&#34;错误。但是,如果我将定义移动到.metal文件,那么它可以工作。头文件只是,

// ShaderMath.h
#pragma once
using namespace metal;
float4 conjugate(const float4 q);

和金属文件,

// ShaderMath.metal
#include <metal_stdlib>
#include "ShaderMath.h"
using namespace metal;
float4 conjugate(const float4 q) {
  return float4( -q.xyz, q.w );
}

我希望这有助于其他人坚持同样的问题。