- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我已经在 Linux 中围绕信号量函数编写了一个包装器。这在过去的 Go 1.3 和 Go 1.4 上对我有用,但我需要使用这个包装器重建我的应用程序,它不再使用 Go 1.6.2 或 Go 1.7rc5 构建。
我编写了一个产生相同错误的简单测试应用程序:
package main
import (
"fmt"
"os"
"linux/semaphore"
)
func main() {
var sema semaphore.Semaphore
if err := sema.Open("/test", 0644, 1); err != nil {
fmt.Printf("%v\n", err)
os.Exit(1)
}
if err := sema.TryWait(); err != nil {
fmt.Printf("%v\n", err)
os.Exit(1)
}
if err := sema.Post(); err != nil {
fmt.Printf("%v\n", err)
os.Exit(1)
}
}
现在程序确实在本地编译 (linux/amd64),我的问题是当我尝试为 linux/arm (Ti am3352) 交叉编译时。
以前我所要做的就是:
GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=1 CC=/am335x_toolchain/bin/armv7l-timesys-linux-gnueabi-gcc go build
现在出现以下错误:
# runtime/cgo
/tmp/go-build820923984/runtime/cgo/_obj/_cgo_export.c:2:20: fatal error: stdlib.h: No such file or directory
#include <stdlib.h>
^
compilation terminated.
所以我指定了包含路径:
GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=1 CC=/am335x_toolchain/bin/armv7l-timesys-linux-gnueabi-gcc CGO_CFLAGS="-I/am335x_toolchain/include" go build
# runtime/cgo
/am335x_toolchain/bin/../lib/gcc/armv7l-timesys-linux-gnueabi/4.8.3/../../../../armv7l-timesys-linux-gnueabi/bin/ld: cannot find Scrt1.o: No such file or directory
/am335x_toolchain/bin/../lib/gcc/armv7l-timesys-linux-gnueabi/4.8.3/../../../../armv7l-timesys-linux-gnueabi/bin/ld: cannot find crti.o: No such file or directory
/am335x_toolchain/bin/../lib/gcc/armv7l-timesys-linux-gnueabi/4.8.3/../../../../armv7l-timesys-linux-gnueabi/bin/ld: cannot find -lpthread
collect2: error: ld returned 1 exit status
最终我得到了这个,但仍然不起作用:
GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=1 CC=/am335x_toolchain/bin/armv7l-timesys-linux-gnueabi-gcc CGO_LDFLAGS="-L/am335x_toolchain/lib -pthread" CGO_CFLAGS="-I/am335x_toolchain/include" go build
# runtime/cgo
/am335x_toolchain/bin/../lib/gcc/armv7l-timesys-linux-gnueabi/4.8.3/../../../../armv7l-timesys-linux-gnueabi/bin/ld: cannot find Scrt1.o: No such file or directory
/am335x_toolchain/bin/../lib/gcc/armv7l-timesys-linux-gnueabi/4.8.3/../../../../armv7l-timesys-linux-gnueabi/bin/ld: cannot find crti.o: No such file or directory
/am335x_toolchain/bin/../lib/gcc/armv7l-timesys-linux-gnueabi/4.8.3/../../../../armv7l-timesys-linux-gnueabi/bin/ld: cannot find /lib/libpthread.so.0
/am335x_toolchain/bin/../lib/gcc/armv7l-timesys-linux-gnueabi/4.8.3/../../../../armv7l-timesys-linux-gnueabi/bin/ld: cannot find /usr/lib/libpthread_nonshared.a
collect2: error: ld returned 1 exit status
pthread 库确实存在:
$ ls /am335x_toolchain/lib | grep "libpthread*"
libpthread-2.18.so
libpthread.a
libpthread_nonshared.a
libpthread.so
libpthread.so.0
关于与 CGO 交叉编译我需要做什么的任何指示?似乎在每个版本中我都遇到了更多与 CGO 交叉编译的问题。
编辑:
我发现这是主机架构的问题。在 x86_64 机器 (linux) 上运行时出现上述问题。当我在 32 位 x86 机器 (linux) 上使用 Go 1.6 编译时,它构建时没有错误。仍然没有找到在64位机器上编译的解决方案。
最佳答案
所以问题是交叉编译器要正确找到它的头文件和库,它需要 --sysroot
option ,在您的情况下,--sysroot/am335x_toolchain/
同时添加到 CGO_CFLAGS 和 CGO_LDFLAGS。
关于linux - cgo 交叉编译找不到库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38797098/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!