我在安装了 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
的引用。
环境:
我尝试过的:
confluent-kafka-go
重新安装 go get -u
软件包。尽管做出了这些努力,问题仍然存在。我已确保
CGO_ENABLED
设置为 1
并且 C 编译器已正确包含在 PATH 中。
问题: 有没有人遇到过类似的问题或者可以提供解决这些链接器错误的见解?关于可能适用于此设置的其他步骤或替代配置有什么建议吗?
预先感谢您的协助!
我也遇到了同样的问题,我所做的就是删除系统环境变量中的这个路径
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