gpt4 book ai didi

assembly - Go 没有链接我的程序集 : undefined external function

转载 作者:IT老高 更新时间:2023-10-28 12:57:35 25 4
gpt4 key购买 nike

我正在尝试编写一些 SIMD,主要用于学习目的。我知道 Go 可以链接程序集,但我无法让它正常工作。

这是我能做的最小的例子(元素向量乘法):

vec_amd64.s(注意:实际文件在 RET 下有一个空白行,否则会导致错误)

// func mul(v1, v2 Vec4) Vec4
TEXT .mul(SB),4,$0-48
MOVUPS v1+0(FP), X0
MOVUPS v2+16(FP), X1
MULPS X1, X0
// also tried ret+32 since I've seen some places do that
MOVUPS X0, toReturn+32(FP)
RET

vec.go

package simd

type Vec4 [4]float32

func (v1 Vec4) Mul(v2 Vec4) Vec4 {
return Vec4{v1[0] * v2[0], v1[1] * v2[1], v1[2] * v2[2], v1[3] * v2[3]}
}

func mul(v1, v2 Vec4) Vec4

simd_test.go

package simd

import (
"testing"
)

func TestMul(t *testing.T) {
v1 := Vec4{1, 2, 3, 4}
v2 := Vec4{5, 6, 7, 8}

res := v1.Mul(v2)
res2 := mul(v1, v2)

// Placeholder until I get it to compile
if res != res2 {
t.Fatalf("Expected %v; got %v", res, res2)
}
}

当我尝试运行 go test 时出现错误:

# testmain
simd.TestMul: call to external function simd.mul
simd.TestMul: undefined: simd.mul

go env 命令报告我的 GOHOSTARCHamd64,我的 Go 版本为 1.3。为了确认不是导致问题的架构,我找到了另一个使用程序集的包,并删除了除 _amd64.s 之外的所有程序集文件,并且它的测试运行良好。

我还尝试将其更改为导出的标识符,以防引起怪异,但没有骰子。我想我非常严格地遵循 math/big 等包中的模板,所以希望它是我所缺少的简单而明显的东西。

我知道 Go 至少尝试使用该程序集,因为如果我在 .s 文件中引入语法错误,构建工具会提示它。

编辑:

需要明确的是,go build 会编译干净,但是 go test 会导致错误出现。

最佳答案

您使用了错误的点。而不是

TEXT .mul(SB),4,$0-48

TEXT ·mul(SB),4,$0-48

一切正常。

关于assembly - Go 没有链接我的程序集 : undefined external function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25460967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com