1 回答
TA贡献1820条经验 获得超2个赞
当linkmode = "c-shared"和linkmode = "c-archive"被定义时,还有一些额外的目标是通过在名称末尾添加后缀来定义的go_binary。例如,您可以构建go_cpp_bridge.c_hdrs来获取头文件。您可以构建go_cpp_bridge.cc可cc_library与其他 C/C++ 目标链接的目标。标头以规则命名go_binary(so go_cpp_bridge.h)。
为了扩展您的示例,这里有一个工作构建文件:
load("@io_bazel_rules_go//go:def.bzl", "go_binary")
go_binary(
name = "go_cpp_bridge",
srcs = ["cpp_bridge.go"],
cgo = True,
linkmode = "c-archive",
)
cc_binary(
name = "main",
srcs = ["main.c"],
deps = [":go_cpp_bridge.cc"],
)
还有一个与 Go 链接的 C 程序:
#include <stdio.h>
#include "go_cpp_bridge.h"
int main() {
printf("%lld\n", Add(21, 21));
return 0;
}
这没有记录,因为它不是一个很好的界面。自实现以来,Bazel 添加了更好的方法来编写 C/C++ 兼容规则,但 Rules_go 尚不支持。#2176是跟踪问题。
- 1 回答
- 0 关注
- 126 浏览
添加回答
举报