Error: symbol 'xxx' is multiply defined
Error: symbol 'xxx' is multiply defined
我在我的代码中添加了多个金属着色器,我现在得到:
Error: symbol '<shader name>' is multiply defined
Command /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/usr/bin/metallib failed with exit code 1
我没有在任何地方包含 .metal
文件(XCode 负责编译本身)并且我无法将 inline
或 static
添加到函数中,所以怎么了?
显然,如果着色器函数与另一个文件中的另一个函数具有完全相同的签名,则它被视为重复。我更改了用于输出的结构的名称并将其链接。
对我来说,当我重命名金属文件时会发生这种情况。出于某种原因,有一些工件存在,我开始在构建时看到重复符号错误。不确定这是错误还是什么,但我能解决的唯一方法是重命名函数。
在 header 文件中定义函数也存在问题。我以为我可以内联它们,但似乎我只能声明它们。
例如,我有这个 header 文件,
// ShaderMath.h
#pragma once
using namespace metal;
float4 conjugate(const float4 q);
float4 conjugate(const float4 q) {
return float4( -q.xyz, q.w );
}
如果我在多个金属文件中包含这个 header,我会收到 "multiply defined" 错误。但是,如果我将定义移动到 .metal 文件,那么它就可以工作。 header 文件只是,
// 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 );
}
我希望这能帮助其他遇到同样问题的人。
我在我的代码中添加了多个金属着色器,我现在得到:
Error: symbol '<shader name>' is multiply defined
Command /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/usr/bin/metallib failed with exit code 1
我没有在任何地方包含 .metal
文件(XCode 负责编译本身)并且我无法将 inline
或 static
添加到函数中,所以怎么了?
显然,如果着色器函数与另一个文件中的另一个函数具有完全相同的签名,则它被视为重复。我更改了用于输出的结构的名称并将其链接。
对我来说,当我重命名金属文件时会发生这种情况。出于某种原因,有一些工件存在,我开始在构建时看到重复符号错误。不确定这是错误还是什么,但我能解决的唯一方法是重命名函数。
在 header 文件中定义函数也存在问题。我以为我可以内联它们,但似乎我只能声明它们。
例如,我有这个 header 文件,
// ShaderMath.h
#pragma once
using namespace metal;
float4 conjugate(const float4 q);
float4 conjugate(const float4 q) {
return float4( -q.xyz, q.w );
}
如果我在多个金属文件中包含这个 header,我会收到 "multiply defined" 错误。但是,如果我将定义移动到 .metal 文件,那么它就可以工作。 header 文件只是,
// 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 );
}
我希望这能帮助其他遇到同样问题的人。