1 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊
當(dāng)linkmode = "c-shared"和linkmode = "c-archive"被定義時(shí),還有一些額外的目標(biāo)是通過(guò)在名稱末尾添加后綴來(lái)定義的go_binary。例如,您可以構(gòu)建go_cpp_bridge.c_hdrs來(lái)獲取頭文件。您可以構(gòu)建go_cpp_bridge.cc可cc_library與其他 C/C++ 目標(biāo)鏈接的目標(biāo)。標(biāo)頭以規(guī)則命名go_binary(so go_cpp_bridge.h)。
為了擴(kuò)展您的示例,這里有一個(gè)工作構(gòu)建文件:
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"],
)
還有一個(gè)與 Go 鏈接的 C 程序:
#include <stdio.h>
#include "go_cpp_bridge.h"
int main() {
? printf("%lld\n", Add(21, 21));
? return 0;
}
這沒有記錄,因?yàn)樗皇且粋€(gè)很好的界面。自實(shí)現(xiàn)以來(lái),Bazel 添加了更好的方法來(lái)編寫 C/C++ 兼容規(guī)則,但 Rules_go 尚不支持。#2176是跟蹤問(wèn)題。
- 1 回答
- 0 關(guān)注
- 185 瀏覽
添加回答
舉報(bào)