【问题标题】:gosec giving "could not import C (no metadata for C)" golang errorgosec 给出“无法导入 C(没有 C 的元数据)”golang 错误
【发布时间】:2021-06-21 23:37:53
【问题描述】:

我正在我的项目上运行 gosec,但由于我们的管道失败,它给出了以下错误

文件中的 Golang 错误:[/home/usr/exmaple/project.go]:

[第 22 行:第 8 列] - 无法导入 C(没有 C 的元数据)

当 go build 命令成功构建项目意味着没有 golang 错误。

【问题讨论】:

    标签: go cgo


    【解决方案1】:

    这似乎是其他人遇到的错误。请参阅this issuethis one。您可能也应该为此向 gosec 报告问题。或者直接在 Go repo 中关于 go/packages 包。

    【讨论】:

      【解决方案2】:

      这不是问题。

      我们发现我们的 C 代码存在于包目录中的 .c 和 .h 文件中,其中 .h 文件仅包含函数原型。我们只在 go 文件 (cgo) 中包含 .h 文件。

      go build 和 go test 命令可以正常工作,因为当在包目录中看到 .c 和 .h 时,这两个命令都会编译并链接它们。 但是 gosec 是一个 SAST 工具,它不会编译包目录中存在的 .c 和 .h 文件,因为这个 gosec 扫描只获取函数原型而不是定义,并且抛出 Golang 错误无法导入 C(没有 C 的元数据)。

      在 cmets (CGO) 中包含整个代码是可行的。现在 gosec 工作正常。

      【讨论】:

        猜你喜欢
        • 2021-01-21
        • 2011-06-19
        • 1970-01-01
        • 2020-07-28
        • 2013-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多