การคอมไพล์ข้าม: ผู้ใช้: ปัจจุบันไม่ได้ใช้งานบน linux/amd64

ฉันรวบรวมโปรแกรม Go ต่อไปนี้บนกล่อง linux/amd64:

package main

import (
    "fmt"
    "os/user"
)

func main() {
    fmt.Println(user.Current())
}

มันใช้งานได้ดี แต่เมื่อฉันคอมไพล์ข้ามจากกล่อง Mac ฉันได้รับข้อผิดพลาดต่อไปนี้เมื่อฉันรันโปรแกรมนั้นบนกล่อง linux ของฉัน:

user: Current not implemented on linux/amd64

ฉันจะคอมไพล์ และ ใช้ฟังก์ชัน Current ในแพ็คเกจ os/user ได้อย่างไร


แก้ไข 1: ฉันควรเพิ่มว่านี่คือคำแนะนำที่ฉันเคยใช้ในการตั้งค่าการคอมไพล์ข้ามบนกล่อง Mac ของฉัน: https://code.google.com/p/go-wiki/wiki/WindowsCrossCompiling


แก้ไข 2: การคอมไพล์ข้ามสำหรับ windows/386 ทำงานได้ดี


person topskip    schedule 16.12.2013    source แหล่งที่มา
comment
คุณใช้เวอร์ชัน Go ใดอยู่ ลินุกซ์ตัวไหน?   -  person Volker    schedule 16.12.2013
comment
@Volker ฉันใช้ go version go1.2 darwin/amd64 และลองรันบน Ubuntu 12.04 LTS (Linux xxx 3.2.0-24-generic #39-Ubuntu SMP Mon May 21 16:52:17 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux)   -  person topskip    schedule 16.12.2013
comment
ฉันมีปัญหาเดียวกัน ฉันมี Linux Fedora 20, golang จาก RPM, go version go1.2.2 linux/amd64 และมีปัญหาเดียวกันหรือไม่ ฉันคอมไพล์บน linux สำหรับ linux ฉันจะหลีกเลี่ยงปัญหานี้ได้อย่างไร?   -  person vodolaz095    schedule 24.08.2014


คำตอบ (1)


นี่เป็นเพราะ ปัญหา 6376: user.Current panic ใน darwin-amd64 เมื่อคอมไพล์ข้าม จาก linux-amd64:

ระบบปฏิบัติการ/ผู้ใช้อาศัย cgo และ cgo ถูกปิดใช้งานสำหรับการคอมไพล์ข้าม ดังนั้นจึงเป็นไปตามที่คาดหวัง

หากคุณใช้ os/user คุณจะต้องคอมไพล์บน OS X

แม้ว่าเราจะเปิดใช้งานการสนับสนุน cgo การคอมไพล์ข้าม แต่ฉันสงสัยว่าทุกคนมี cross toolchain ของ OS X ที่ใช้งานได้บนเครื่อง linux ของพวกเขา

สถานะ: ทำงานตามที่ตั้งใจไว้

person Intermernet    schedule 16.12.2013
comment
น่าเสียดายที่ฉันต้องยอมรับคำตอบของคุณ ;-) ขอบคุณมาก - person topskip; 16.12.2013
comment
สิ่งที่ Go สามารถเรียกว่าการคอมไพล์ข้ามได้ในทางที่สมจริงแค่ไหน? - person Julie in Austin; 23.03.2018