【问题标题】:Go - Cross compiling with CGO using xgo libraryGo - 使用 xgo 库与 CGO 交叉编译
【发布时间】:2016-11-07 13:49:45
【问题描述】:

我正在尝试编译一个使用 gokiri 库的 GO 应用程序。 我安装了 docker 并在本地编译了 xgo go 的交叉编译器。 尝试执行以下命令时:

./xgo mydomain.com/test/test-app

我收到以下错误:

In file included from /usr/include/libxml2/libxml/parser.h:810:0,
             from /usr/include/libxml2/libxml/globals.h:18,
             from /usr/include/libxml2/libxml/threads.h:35,
             from /usr/include/libxml2/libxml/xmlmemory.h:218,
             from /usr/include/libxml2/libxml/tree.h:1307,
             from ../../github.com/moovweb/gokogiri/help/help.go:6:
/usr/include/libxml2/libxml/encoding.h:28:19: fatal error: iconv.h: No such file or directory

我已经安装了xcode-tools,它帮助我为我的机器(mac ox El Capitan)编译了它。但是,我无法将它编译到其他环境。

任何帮助将不胜感激。谢谢。

更新 1:

我尝试添加依赖,但得到了相同的结果:

./xgo --deps /usr/local/Cellar/libiconv/1.14/ mydomain.com/test/test-app

xgo的日志中甚至提到这个库已经被缓存了:

Dependency already cached: /Users/macuser/.xgo-cache/1.14.

【问题讨论】:

  • 看来您需要通过--deps 标志为xgo 提供所有C 依赖项。构建容器需要知道从哪里获取它正在构建的 C 包的 deps。
  • @JimB 检查我编辑的问题,它没有帮助。
  • 我会尝试在没有 xgo 的 linux 容器中构建它,既可以确切地看到什么不工作,也因为它可能更容易,并且可以让你更多地控制直接使用 docker 而不是用 xgo 解决这个问题.
  • @JimB 你能给我一些关于如何使用 docker 在 linux 容器中构建它的参考吗?我对此很陌生。非常感谢!
  • 一旦你可以运行一个容器,在容器内构建包就像在一个完整的 Linux 主机上一样。 Get Started With Docker 可能是一个不错的起点。

标签: macos go docker cgo gokogiri


【解决方案1】:

来自文档:

假设依赖的C/C++库是configure/make 基于,为交叉编译做好了适当的准备,可作为 压缩包下载(.tar、.tar.gz 或 .tar.bz2)。进一步的计划包括 如果需要,将其扩展到基于 cmake 的项目(请打开 如果它对您很重要,请发布)。

可以通过 --deps 参数添加此类依赖项。他们会 在开始交叉编译和包之前检索 缓存以节省后续调用的带宽。

所以在这个例子中,它会是:

./xgo --deps https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz mydomain.com/test/test-app

【讨论】:

    猜你喜欢
    • 2020-03-28
    • 2016-12-12
    • 2015-11-25
    • 2023-02-01
    • 2014-08-24
    • 2023-03-14
    • 2016-03-09
    • 2021-08-14
    • 2012-08-23
    相关资源
    最近更新 更多