Windows 11 上 Confluence Kafka Go 包和 MSYS2 GCC 的链接错误

问题描述 投票:0回答:1

我在安装了 MSYS2 GCC 的 Windows 11 64 位上构建 Golang 应用程序时遇到链接错误。当我尝试使用

confluent-kafka-go
包时出现问题。

错误信息:

$ go build main.go
# command-line-arguments
C:\Program Files\Go\pkg\tool\windows_amd64\link.exe: running gcc failed: exit status 1
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/Thadeu/go/pkg/mod/github.com/confluentinc/confluent-kafka-go/[email protected]/kafka/librdkafka_vendor/librdkafka_windows.a(rdkafka_error.c.obj):(.text+0x8e): undefined reference to `__imp__vsnprintf_s'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/Thadeu/go/pkg/mod/github.com/confluentinc/confluent-kafka-go/[email protected]/kafka/librdkafka_vendor/librdkafka_windows.a(rdkafka_mock.c.obj):(.text+0x8e): undefined reference to `__imp__vsnprintf_s'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/Thadeu/go/pkg/mod/github.com/confluentinc/confluent-kafka-go/[email protected]/kafka/librdkafka_vendor/librdkafka_windows.a(rdkafka_txnmgr.c.obj):(.text+0xca): undefined reference to `__imp__vsnprintf_s'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/Thadeu/go/pkg/mod/github.com/confluentinc/confluent-kafka-go/[email protected]/kafka/librdkafka_vendor/librdkafka_windows.a(rdkafka_idempotence.c.obj):(.text+0x8e): undefined reference to `__imp__vsnprintf_s'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/Thadeu/go/pkg/mod/github.com/confluentinc/confluent-kafka-go/[email protected]/kafka/librdkafka_vendor/librdkafka_windows.a(rdkafka_aux.c.obj):(.text+0x8e): undefined reference to `__imp__vsnprintf_s'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/Thadeu/go/pkg/mod/github.com/confluentinc/confluent-kafka-go/[email protected]/kafka/librdkafka_vendor/librdkafka_windows.a(rdkafka_admin.c.obj):(.text+0x8e): more undefined references to `__imp__vsnprintf_s' follow
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/Thadeu/go/pkg/mod/github.com/confluentinc/confluent-kafka-go/[email protected]/kafka/librdkafka_vendor/librdkafka_windows.a(regexp.c.obj):(.text+0x29fe): undefined reference to `_setjmp'
collect2.exe: error: ld returned 1 exit status

这似乎是一个链接器(

ld.exe
)问题,因为它无法在我正在使用的库中找到
__imp__vsnprintf_s
_setjmp
的引用。

环境:

  • 操作系统:Windows 11 64位
  • Golang版本:1.21.5
  • 海湾合作委员会版本:13.2.0
  • Confluence Kafka Go 包版本:v2.3.0

我尝试过的:

  1. 通过MSYS2将GCC更新到最新版本。 MSYS2 指南
  2. 使用
    confluent-kafka-go
    重新安装
    go get -u
    软件包。

尽管做出了这些努力,问题仍然存在。我已确保

CGO_ENABLED
设置为
1
并且 C 编译器已正确包含在 PATH 中。

问题: 有没有人遇到过类似的问题或者可以提供解决这些链接器错误的见解?关于可能适用于此设置的其他步骤或替代配置有什么建议吗?

预先感谢您的协助!

windows go gcc apache-kafka msys2
1个回答
0
投票

我也遇到了同样的问题,我所做的就是删除系统环境变量中的这个路径

C:\msys64\ucrt64\bin\
并将其更改为
C:\msys64\mingw64\bin
,我认为ucrt64中对'__imp__vsnprintf_s'的引用与mingw64不同。就我而言,代码再次运行。

我差点忘了,我也在 MSYS2 MINGW64 shell 中通过默认安装过程运行这个命令

$ pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
。然后我将 go 版本从
go1.19.13
 降级为 
go1.22.0

© www.soinside.com 2019 - 2024. All rights reserved.