当前位置: 首页 > 面试题库 >

交叉编译共享库

颜新
2023-03-14
问题内容

我想知道是否有可能(如果可以:如何)使用Go交叉编译共享库。说我有这段代码:

package main

import "C"

//export DoubleIt
func DoubleIt(x int) int {
    return x * 2
}

func main() {}

在中src/doubler/main.go。在Mac上,我可以运行

go build -o libdoubler.dylib -buildmode=c-shared doubler

获得名为的共享库libdoubler.dylib。与Linux类似,只是扩展名为.so

现在,我想使用Linux作为构建库的主要平台(适用于Mac和Windows)。我有什么选择?

设置GOOSdarwin运行上面的linux上,我得到

can't load package: package doubler: no buildable Go source files in /home/patrick/Desktop/go/src/doubler

有任何想法吗?


问题答案:

您面临的问题实际上与编译共享库或可执行文件无关,而与使用cgo并尝试交叉编译有关。(不过,如果您要的是库而不是可执行文件,则包名称不应为main。)

交叉编译时,默认情况下cgo是禁用的。如果添加环境变量CGO_ENABLED=1,那么您的示例将起作用:

CGO_ENABLED=1 GOOS=darwin go build -o libdoubler.dylib -buildmode=c-shared doubler

请记住,在交叉编译时使用cgo会很麻烦。您将需要确保目标平台上的C库已在主机上准备好。如果没有必要,请远离cgo。如果需要,则可以考虑在目标计算机上进行编译,而不是使用cgo进行交叉编译的维护。



 类似资料:
  • 我在、Visual C++和交叉编译器的帮助下为构建项目。它运行良好,但如何处理情况时,我需要链接到库?我是否应该用当前的交叉编译器构建所有必需的库?例如如何处理库?

  • 问题内容: 我创建了一个交叉编译的arm可执行文件。我想找到可执行文件的库依赖项。我正在使用ubuntu natty并安装了不包含ldd的arm-linux- gnueabi工具链。有没有可用的工具来查看Linux中arm可执行文件库的依赖性。 问题答案: 这有点儿混乱,但这是我能找到的最好的解决方案,对于基本用途它确实很好用-只需使用其他交叉工具将此脚本另存为“ arm-none-linux-g

  • 本文档说明如何在kali linux上配置ARM交叉编译环境,是我们多份关于”定制ARM镜像”的文档的起点. 开发机的配置 编译内核生成镜象通常需要大量硬盘空间.确保你的开发机至少有50G可用硬盘空间以及足够的内存,CPU不要太差. 安装依赖 先安装ARM交叉编译所需的依赖. apt-get install git-core gnupg flex bison gperf libesd0-dev b

  • 问题内容: 各位 我正在尝试在Ant和终端上玩Javac Cross编译。在本地和集成环境中,我在一个非常基本的问题上遇到了同样的问题。 我在linux终端(以及在Windows和cmd的cygwin上)上运行此命令: 与Main.java一起使用,仅是System.out.println。 我收到错误消息: 我在本地Windows机器上的配置大致相同,结果完全相同。 我的理解是,交叉编译就是使用

  • 我在c代码中使用include: 。当我用“gcc”编译器编译它时,我没有任何错误,但当我用交叉编译器“arm-linux-gnueabi-gcc”编译它时,我有以下错误:

  • 我试图交叉编译一个linux系统的简单hello world程序。 我有以下资料: null 我试图运行/lib/libc.so.0来获取版本信息,但出现了一个分段错误。它似乎用-static编译解决了这个问题。所以我想这是libc库的问题。谢谢你的帮助。