首页 > 解决方案 > 主包中的 CGO 调用与模块中的 CGO 调用有什么区别?

问题描述

我编写了一个 BPF 程序,我可以使用 gobpf 安装它,即使用他们的 bcc 工具。虽然这在主包中可以正常工作,但一旦我将其移动到包中以将其作为模块导入,它就会中断。

澄清一下:它适用于 中的所有代码package main,但是一旦我重命名包并将其移至main()它,cmd/command.go它就会停止工作,并go run抱怨它找不到包含的 lib ( bcc/proto.h)。gcc顺便说一句,这与我在文件上运行时总是遇到的错误相同,.c但没有任何迹象表明我想使用 BPF(这部分gobpf对我有用,直到我将其调用移至模块......)。

我意识到这是一个非常具体的问题,位于 Go、CGo、C 和 C++ 处理方式、BPF 和 bcc 之间的一个奇怪的地方,但我在这里不知所措。

如果有帮助,您可以在此处查看我的代码https://github.com/bwNetFlow/bpfdump 。bcc除了go run做它的事情之外,它还需要安装。基本上:

PS:我认为这可能与这个(相当有创意?)构造有关bcc/proto.hhttps ://github.com/iovisor/bcc/blob/master/src/cc/exported_files.cc

标签: gocgogo-modulesbpfbcc-bpf

解决方案


推荐阅读