2013-08-13 44 views
5

Mỗi lần tôi cố gắng biên dịch chương trình của tôi sau (sáng nay) nâng cấp đi từ 1.1.1 đến 1.1.2 (trên Windows 7 64 bit), tôi nhận được thông báo lỗi như:Làm thế nào để biên dịch chương trình đi trong 1.1.2 với các phụ thuộc được biên dịch trong 1.1.1?

C:\Users\VonC\prog\go\src\github.com\spf13\hugo>go build -o hugo.exe main.go 
# github.com/spf13/hugo/hugolib 
hugolib\page.go:23: import C:\Users\VonC\prog\go\pkg\windows_amd64/github.com/emicklei/hopwatch.a: 
    object is [windows amd64 go1.1.1 X:none] 
    expected [windows amd64 go1.1.2 X:none] 

Tôi đã thử một go clean -r , nhưng thông báo lỗi vẫn tồn tại?

Câu lệnh clean phù hợp để sử dụng là gì?

+0

Tôi ngạc nhiên khi hệ thống xây dựng Go được cho là sẽ tìm ra bất kỳ công cụ lỗi thời nào trong $ GOPATH/pkg và (chuyển tiếp) xây dựng lại theo yêu cầu. – zzzz

+0

@jnml Tôi đồng ý. Nó bỏ lỡ sự phụ thuộc, nhưng có lẽ vì tôi đã không sử dụng 'đi xây dựng -a' ban đầu? – VonC

+1

@jnml. Tôi đã tìm thấy sự không thống nhất trong quá trình thiết lập của tôi, điều này đã kích hoạt thông báo lỗi đó. Tôi đã chỉnh sửa câu trả lời của mình bên dưới. – VonC

Trả lời

4

giải pháp thực tế:

Tôi tái tạo vấn đề này với:

  • gọi 1.1.2 go.exe trực tiếp (Tôi không có %GOROOT%\bin trong con đường của tôi)
  • với GOROOT trỏ đến trước 1.1.1 thư mục cài đặt (tôi giữ 1.1.1 và 1.1.2 cài đặt trong các thư mục riêng biệt).

Nếu bạn đang gắn bó với các thiết lập mặc định đi (ví dụ: thư mục cài đặt mộtC:\go, và %GOROOT%\bin trong PATH của bạn), bạn sẽ không thấy lỗi này.

Nhưng nếu bạn thấy lỗi này:

  • đảm bảo %GOROOT% là phù hợp với go.exe bạn đang gọi
  • go install -a như được giải thích dưới đây. Các go clean được đề cập dưới đây sẽ không cần thiết.
    Như jnmlcomments:

the Go build system is supposed to figure out any obsolete stuff in $GOPATH/pkg and (transitively) rebuild it on demand.


giải pháp gốc:

Trong mục "file đối tượng Remove" trong trang "Command go", tôi bỏ lỡ go clean -i tùy chọn:

-i 

The -i flag causes clean to remove the corresponding installed archive or binary (what 'go install' would create).

Và những tệp .a (như hopwatch.a) là chính xác những gì đi cài đặt tạo ra cho các thư viện (trong Windows).

Vì vậy, các lệnh sạch đầy đủ, để đảm bảo đi xây dựng lại tất cả mọi thứ, sẽ là:

cd C:\Users\VonC\prog\go\src\github.com\spf13\hugo 
go clean -r -i 
go install -a 

Đó sẽ xây dựng lại và cài đặt tất cả mọi thứ, bao gồm tất cả các gói phụ thuộc.

-a thực sự là tùy chọn xây dựng, buộc xây dựng lại các gói đã được cập nhật.


Như thường lệ, go clean -r -n sẽ hiển thị bạn biết những gì sẽ được làm sạch (-n: Tùy chọn xem trước).
Nó không làm tổn thương để chắc chắn về những gì sẽ bị xóa ... trước khi thực sự xóa bất cứ điều gì.

Các vấn đề liên quan