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 關注
- 171 瀏覽
添加回答
舉報