问题
当我发出go run main.go
时,会出现很多重复的符号错误,例如
duplicate symbol __cgo_c9759b266284_Cfunc_rd_kafka_produce_batch in:
/var/folders/9x/wkfpz7ds6h973089xymk9_mc0000gn/T/go-link-426232578/000015.o
/var/folders/9x/wkfpz7ds6h973089xymk9_mc0000gn/T/go-link-426232578/000032.o
duplicate symbol __cgo_c9759b266284_Cfunc_do_produce in:
/var/folders/9x/wkfpz7ds6h973089xymk9_mc0000gn/T/go-link-426232578/000015.o
/var/folders/9x/wkfpz7ds6h973089xymk9_mc0000gn/T/go-link-426232578/000032.o
duplicate symbol _do_produce in:
/var/folders/9x/wkfpz7ds6h973089xymk9_mc0000gn/T/go-link-426232578/000015.o
/var/folders/9x/wkfpz7ds6h973089xymk9_mc0000gn/T/go-link-426232578/000032.o
ld: 74 duplicate symbols for architecture x86_64
上下文
我的主软件包导入一个外部软件包(由我自己拥有,但是作为外部软件包托管)。主软件包和另一个软件包都将导入Kafka软件包(github.com/confluentinc/confluent-kafka-go/kafka)。这个Kafka软件包要求我安装C库(librdkafka)。 Go编译程序时会包括这些C库,以便一切正常。
我认为有误的地方
我认为因为我的主软件包和外部软件包都导入了Kafka库,所以Go认为它需要两次包含C库。我对内部知识不甚了解-也许确实如此-但如果它能够检测到已经包含这些库,那么不会发生重复的符号错误,那将是很好的选择。
我为什么这么认为
如果将外部软件包复制到主软件包内部并在那里使用它而不是导入外部软件包,我不会出现任何错误。
任何熟悉此问题并有解决方法的人吗?