链接到外部库时,您确实需要为您的目标架构单独编译它。cgo
无法替换configure
/ make
(或其他)来编译库;它只知道如何.c
在你的包目录中构建几个文件,而一个库的构建过程可能会更复杂。
我不太确定在交叉编译时如何完成在外部库中链接的更大任务(而且我不确定你已经完成了什么)。交叉编译的(已关闭)Go 错误在cgo
这里看起来很有用。您可能希望使用以下描述的一些环境变量集构建 Go 工具链godoc cmd/cgo
:
要在交叉编译构建期间启用 cgo,请在使用 make.bash 构建 Go 工具时将 CGO_ENABLED 环境变量设置为 1。此外,将 CC_FOR_TARGET 设置为目标的 C 交叉编译器。CC 将用于为主机编译。
Go 工具构建后,运行 go 命令时,CC_FOR_TARGET 被忽略。运行 make.bash 时 CC_FOR_TARGET 的值是默认编译器。但是,您可以设置环境变量 CC,而不是 CC_FOR_TARGET,以在运行 go 工具时控制编译器。
CXX_FOR_TARGET 对 C++ 代码的工作方式类似。
该错误还提到了使用的人-ldflags="-extld=$(CC)"
($(CC)
他们想要使用的交叉编译器的名称在哪里)。
在您的示例代码中有一个明确的-L/usr/local/lib
,我认为这不会起作用:我认为当您为目标构建库时,您将希望将它们放在与lib
您的主机架构不同的目录中。例如,这个 ARM 交叉编译 HOWTO在某些地方 使用了/usr/local/arm-linux
前缀或 install_root。