【问题标题】:How to build a C dependency of go project in a subdirectory如何在子目录中构建go项目的C依赖
【发布时间】:2014-06-02 09:34:03
【问题描述】:

我正在为 Go 中的 C 库编写 Go 包装器。问题是,C 库在许多 Linux 发行版上不可用,所以我想要一个解决方案,我“去 github.com/me/mylibrary”不需要任何人安装库。

一种解决方案是将库的源代码添加到子目录中。然后,当我的项目使用 go get 构建时,我也需要自动构建这个库。但我不知道如何实现自动化。

或者我可以有一个脚本来下载源代码,提取并构建它

但我不知道如何将这些构建步骤与 go build 工具联系起来。

链接静态库也不是最简单的。

#cgo linux LDFLAGS: ./MyLib/lib/libMyLib.a -lstdc++ -lm -lX11

只要我从我的库构建就可以工作,但只要我想从另一个项目构建,相对路径就来自该项目而不是来自我的库,所以它会失败。

【问题讨论】:

    标签: go build-dependencies cross-language


    【解决方案1】:

    根据http://golang.org/cmd/cgo/#hdr-Using_cgo_with_the_go_command

    当 Go 工具看到一个或多个 Go 文件使用特殊导入时 "C",它会在目录中寻找其他非Go文件并编译 它们作为 Go 包的一部分。任何 .c、.s 或 .S 文件都将 用 C 编译器编译。任何 .cc、.cpp 或 .cxx 文件都将 用 C++ 编译器编译。

    因此,您可以将 C 库源代码包含在您的存储库中,然后 Go 会自动构建它。该页面还解释了如何将构建标志传递给编译器以及您可能需要了解的任何其他内容。

    【讨论】:

    • 到目前为止我已经知道这一点,但是我要包装的库不仅仅是几个文件。它有自己的makefile,我想使用这些。此外,我不想将我的代码与库的代码混合在一起,以防库将来发生变化。
    • 那么你必须创建自己的 Makefile 来准备另一个项目,以便与 go 进行最终链接
    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 2015-11-30
    • 2013-01-30
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多