Bir "go get" kurulumunda başarısız olan dahili derleme komutlarını nasıl görebilirim?


126

Bağımlılıkları olan bir paketi çekip kuruyorum ve bir derleme başarısız oluyor, bu durumda bir dosya bulamıyorum magic.h,. Derleme komutlarının ve bayraklarının ne olduğunu nasıl görebilirim? -vSeçenek yardımcı olmuyor. (Magic.h'den nereden alınacağına dair fikir istemiyorum, bu sadece bir örnek.)

$ go get -u github.com/presbrey/magicmime
# github.com/presbrey/magicmime
../../../src/github.com/presbrey/magicmime/magicmime.go:20:11: fatal error:   'magic.h' file not found
#include <magic.h>

Örneğin, dosya içerme işlemini nerede aradığını, tam olarak hangi kaynağı derlediğini nasıl bulabilirim? (Bu durumda ben gördüğünüz kaynak dosyası $GO_PATH/srcolduğunu vardır #includedışarı yorumladı ve /usr/local/include/match.hyine mevcut.)


Yorumlanmadı, bu bir cgo'nun sihirli yorumu. Herhangi bir C derleyicisinin arayacağı dosyayı arar. Libmagic'i doğru şekilde kurduğunuzdan emin olun. Golang.org/cmd/cgo adresine bakın .
Ainar-G

Libmagic'i, go'yu da yükleyen brew kullanarak kaldırdım ve yeniden yükledim. Soru, ne yapmakta olduğunun üstünü nasıl kaldıracağımızdır. Kullandığı kaynak dosya src ağacındakiyle eşleşmiyor - peki bu dosyayı nereden aldı? $ bul ~ / go / src -name "* .go" -exec grep magic.h {} \; // #include <magic.h> // #include <magic.h>> -not commented out line
timbl

Cgo bağlantısını okudunuz mu? Bu sihirli bir yorum. Go derleyicisi bunu C derleyicisine yapılan bir çağrıya çevirir ve bu da magic.h'yi bulamadığı için başarısız olur. #include <magic.h>İçinde bir C dosyası oluşturmayı deneyin ve bir C derleyicisi ile derleyin. Başarısız olmaz, ilginçleşir.
Ainar-G

Ayrıca aramanız gerekebilir brew link libmagic(bkz. Gist.github.com/eparreno/1845561 ).
Ainar-G

Yanıtlar:


101

Go build -x on problem paketini çalıştırın:

go build -x github.com/presbrey/magicmime
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.